⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_38178.htm

📁 一些关于vc的问答
💻 HTM
字号:
<p>
序号:38178 发表者:懿和 发表日期:2003-05-01 11:36:19
<br>主题:紧急求帮助,SDI视图切换问题!&nbsp;&nbsp;急 急 急 急 急 急!!!!!!!
<br>内容:<BR>我在SDI程序中新建立了一个视图,现在要把原来的SDI提供的视图切换成这个视图。<BR>但出现一个ASSERTION 具体位置是在调用的CFrameWnd::SetActiveView()函数中:<BR><BR>void CFrameWnd::SetActiveView(CView* pViewNew, BOOL bNotify)<BR>{<BR>#ifdef _DEBUG<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (pViewNew != NULL)<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(IsChild(pViewNew));&nbsp;&nbsp;//就是这里,IsChild函数返回了假<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ASSERT_KINDOF(CView, pViewNew);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>#endif //_DEBUG<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;CView* pViewOld = m_pViewActive;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (pViewNew == pViewOld)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;&nbsp;&nbsp;&nbsp;&nbsp; // do not re-activate if SetActiveView called more than once<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;m_pViewActive = NULL;&nbsp;&nbsp; // no active for the following processing<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;// deactivate the old one<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (pViewOld != NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pViewOld-&gt;OnActivateView(FALSE, pViewNew, pViewOld);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;// if the OnActivateView moves the active window,<BR>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;that will veto this change<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (m_pViewActive != NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;&nbsp;&nbsp;&nbsp;&nbsp; // already set<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_pViewActive = pViewNew;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;// activate<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (pViewNew != NULL &amp;&amp; bNotify)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pViewNew-&gt;OnActivateView(TRUE, pViewNew, pViewOld);<BR>}<BR><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>
<font color=red>答案被接受</font><br>回复者:---信风--- 回复日期:2003-05-01 12:25:41
<br>内容:你新建的视图是不是和主框架没有关系?<BR>SDI程序会在程序启动的时候创建文档模板,以后在创建文档视图对象自动把他们绑在一起。如果你只是使用你自己的视图,可以把下面的CSDIView换成你的视图类。<BR>pDocTemplate = new CSingleDocTemplate(<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDR_MAINFRAME,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RUNTIME_CLASS(CSDIDoc),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RUNTIME_CLASS(CMainFrame),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // main SDI frame window<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RUNTIME_CLASS(CSDIView));<BR>AddDocTemplate(pDocTemplate);<BR><BR>如果不是,要让IsChild返回true,你要先把frame设为视图的父窗口,SetParent。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:懿和 回复日期:2003-05-01 12:50:23
<br>内容:&nbsp;&nbsp;&nbsp;&nbsp;我也不知道下面这样做算不算是指定了关系,我在程序中建了两个新视图,并在菜单中准备切换客户区中的视图。我是参照一本书所附光盘中的例子来的,从例子中取了几个文件到自己的测试工程,但是有问题。问题很紧急,你看我可不可以把代码邮给你看看,我是重新建了一个工程来测试例子上的视图切换方法的,非常感谢!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CSDIDocTemplate* pDocTemplate;<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDocTemplate = new CSDIDocTemplate(<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDR_MAINFRAME,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RUNTIME_CLASS(CNewMultiViewsDoc),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RUNTIME_CLASS(CMainFrame),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // main SDI frame window<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RUNTIME_CLASS(CNewMultiViewsView));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;AddDocTemplate(pDocTemplate);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//下面添加新视图,上面的是SDI原来有的视图<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;pDocTemplate = new CSDIDocTemplate(<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDR_NEWVIEW,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RUNTIME_CLASS(CNewMultiViewsDoc),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RUNTIME_CLASS(CMainFrame),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// main SDI frame window<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RUNTIME_CLASS(CNewFormViewOne));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AddDocTemplate(pDocTemplate);<BR><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;pDocTemplate = new CSDIDocTemplate(<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDR_NEWVIEW,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RUNTIME_CLASS(CNewMultiViewsDoc),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RUNTIME_CLASS(CMainFrame),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// main SDI frame window<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RUNTIME_CLASS(CNewFormViewTwo));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AddDocTemplate(pDocTemplate);
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:李岩飞 回复日期:2003-05-01 18:06:55
<br>内容:请参考一个很简单的例子。<BR>在这个例子里要增加视图,只需要增加#include行和OnChangeView()里的case两个地方。<BR>2003-5-1 18:09:41

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -