📄 subject_38178.htm
字号:
<p>
序号:38178 发表者:懿和 发表日期:2003-05-01 11:36:19
<br>主题:紧急求帮助,SDI视图切换问题! 急 急 急 急 急 急!!!!!!!
<br>内容:<BR>我在SDI程序中新建立了一个视图,现在要把原来的SDI提供的视图切换成这个视图。<BR>但出现一个ASSERTION 具体位置是在调用的CFrameWnd::SetActiveView()函数中:<BR><BR>void CFrameWnd::SetActiveView(CView* pViewNew, BOOL bNotify)<BR>{<BR>#ifdef _DEBUG<BR> if (pViewNew != NULL)<BR><BR> {<BR> ASSERT(IsChild(pViewNew)); //就是这里,IsChild函数返回了假<BR> ASSERT_KINDOF(CView, pViewNew);<BR> <BR> }<BR>#endif //_DEBUG<BR><BR> CView* pViewOld = m_pViewActive;<BR> if (pViewNew == pViewOld)<BR> return; // do not re-activate if SetActiveView called more than once<BR><BR> m_pViewActive = NULL; // no active for the following processing<BR><BR> // deactivate the old one<BR> if (pViewOld != NULL)<BR> pViewOld->OnActivateView(FALSE, pViewNew, pViewOld);<BR><BR> // if the OnActivateView moves the active window,<BR> // that will veto this change<BR> if (m_pViewActive != NULL)<BR> return; // already set<BR> m_pViewActive = pViewNew;<BR><BR> // activate<BR> if (pViewNew != NULL && bNotify)<BR> pViewNew->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> IDR_MAINFRAME,<BR> RUNTIME_CLASS(CSDIDoc),<BR> RUNTIME_CLASS(CMainFrame), // main SDI frame window<BR> 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>内容: 我也不知道下面这样做算不算是指定了关系,我在程序中建了两个新视图,并在菜单中准备切换客户区中的视图。我是参照一本书所附光盘中的例子来的,从例子中取了几个文件到自己的测试工程,但是有问题。问题很紧急,你看我可不可以把代码邮给你看看,我是重新建了一个工程来测试例子上的视图切换方法的,非常感谢! <BR><BR><BR> CSDIDocTemplate* pDocTemplate;<BR> pDocTemplate = new CSDIDocTemplate(<BR> IDR_MAINFRAME,<BR> RUNTIME_CLASS(CNewMultiViewsDoc),<BR> RUNTIME_CLASS(CMainFrame), // main SDI frame window<BR> RUNTIME_CLASS(CNewMultiViewsView)); <BR> AddDocTemplate(pDocTemplate);<BR><BR> <BR> //下面添加新视图,上面的是SDI原来有的视图<BR><BR> pDocTemplate = new CSDIDocTemplate(<BR> IDR_NEWVIEW,<BR> RUNTIME_CLASS(CNewMultiViewsDoc),<BR> RUNTIME_CLASS(CMainFrame), // main SDI frame window<BR> RUNTIME_CLASS(CNewFormViewOne)); AddDocTemplate(pDocTemplate);<BR><BR><BR> pDocTemplate = new CSDIDocTemplate(<BR> IDR_NEWVIEW,<BR> RUNTIME_CLASS(CNewMultiViewsDoc),<BR> RUNTIME_CLASS(CMainFrame), // main SDI frame window<BR> RUNTIME_CLASS(CNewFormViewTwo)); 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 + -