📄 subject_33304.htm
字号:
<p>
序号:33304 发表者:xiongli 发表日期:2003-03-19 12:54:53
<br>主题:如何动态删除MainFrame里面的一个View,然后建立一个新类型的View
<br>内容:为了实现不同文件类型操作,需要用三个不同class的View来显示不同的文件类型。我想在需要操作的文件类型变更后,删除当前的View ,然后动态建立用来操作新文件类型的View.但是当我这样:<BR>m_MyView.Destroy();<BR>后,程序就像死了一样。<BR>我该怎么做?
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:tjhe 回复日期:2003-03-19 14:27:17
<br>内容:多文档(MDI)程序自己管理文档、视及其框架的建立和删除,不用Destroy()这样去删除。<BR><BR>要动态管理,可在应用类中建立三个文档模板(每个文档模板对应各自得文档、视及其框架、相应资源),主框架加入如下函数:<BR><BR>CFrameWnd* CMainFrame::NewView(CMultiDocTemplate* pDocTemplate)<BR>{<BR> if(pDocTemplate == NULL) return NULL;<BR><BR> CDocument* pDoc = pDocTemplate->CreateNewDocument();<BR> ASSERTpDoc != NULL);<BR> CFrameWnd* pNewChild = pDocTemplate->CreateNewFrame(pDoc,NULL);<BR> ASSERT(pNewChild != NULL);<BR> pDocTemplate->InitialUpdateFrame(pNewChild,pDoc);<BR><BR> return pNewChild;<BR>}<BR><BR>如果想动态删除view,可在view中取得其文档,然后关闭文档:<BR>GetDocument( )->OnCloseDocument();<BR>或取得view的对应的子框架,发送消息令其关闭:<BR>GetParent()->SendMessage(WM_CLOSE);<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:xiongli 回复日期:2003-03-19 14:29:18
<br>内容:我是sdi<BR>而且没有用到doc
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:tjhe 回复日期:2003-03-19 14:54:02
<br>内容:sdi怎么有不同的文件类型?<BR>没用到doc,那就相当于每次打开新的view(类似同对话框),这个问题论坛中好像出现过多次,可以搜索一下。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:xiongli 回复日期:2003-03-19 15:34:17
<br>内容:是这样的<BR>用其他控间来来选择文件,然后把文件路径传递到frame,frame根据文件性质来选择用什么view来操作。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:tjhe 回复日期:2003-03-19 18:57:44
<br>内容:你的view都是从哪个类派生的?是CFormView?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:xiongli 回复日期:2003-03-19 21:17:06
<br>内容:从CWnd<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:xiongli 回复日期:2003-03-19 21:18:19
<br>内容:其中一个是播放flash的<BR>一个是自己写的用dx8播放音频,视频,图片浏览的<BR>还准备下载一个可以打开zip的
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:tjhe 回复日期:2003-03-19 22:05:50
<br>内容://m_MyView.Destroy(); //建议使用指针<BR>如:m_pMyView = new CMyView();<BR> m_pMyView->Create(....);<BR><BR>销毁时试试这样:<BR> m_pMyView->SendMessage(WM_CLOSE);//或WM_DESTROY<BR> AfxGetMainWnd()->UpdateWindow();<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:xiongli 回复日期:2003-03-20 11:59:49
<br>内容:还是不行<BR>如果用指针操作,在Create的时候会引发一个断言错误<BR>在CWnd::SerCursor()里面<BR>assert(::IsWindow(m_hWnd))
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:iwill 回复日期:2003-03-20 12:58:55
<br>内容:主框架中这样:<BR>CView *old=GetActiveView();<BR>CreateContext cct;<BR>cct.m_pCurrentDoc=GetActiveDocument();<BR>cct.m_pCurrentFrame=this;<BR>cct.m_pLastView=old;<BR>cct.m_pNewViewClass=RUNTIME_CLASS(CNewView);<BR>if(!CreateView(&cct))<BR> return FALSE;<BR>old->DestoryWindow();
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:xiongli 回复日期:2003-03-20 13:27:18
<br>内容:我的View就是像精灵里面的sdi而且没有view/doc结构的普通建立方法:<BR>int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)<BR>{<BR> if (CFrameWnd::OnCreate(lpCreateStruct) == -1)<BR> return -1;<BR> // create a view to occupy the client area of the frame<BR> if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,<BR> CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL))<BR> {<BR> TRACE0("Failed to create view window\n");<BR> return -1;<BR> }<BR>.................<BR>2003-3-20 13:30:38
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -