📄 如何sdi中进行多视图切换__代码下载__常州vc编程网.htm
字号:
color=#ffff00>本站首页</FONT></A> >> <A
href="http://www.czvc.com/code.asp"><FONT
color=#ffff00>代码下载</FONT></A> >> <A
href="http://www.czvc.com/down.asp?id=10"><FONT
color=#ffff00>如何SDI中进行多视图切换</FONT></A></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=627 align=center border=0>
<TBODY>
<TR>
<TD width=5
background=如何SDI中进行多视图切换__代码下载__常州VC编程网.files/back2.gif> </TD>
<TD align=middle width=617 bgColor=#000000>
<TABLE cellSpacing=0 cellPadding=2 width=607 align=center
border=0><TBODY>
<TR>
<TD width=607 colSpan=4 height=8></TD></TR>
<TR>
<TD width=73>代码名称:</TD>
<TD width=534 colSpan=3><FONT
color=#00ff00>如何SDI中进行多视图切换</FONT></TD></TR>
<TR>
<TD width=73>更新日期:</TD>
<TD width=231><FONT color=#00ff00>2003-11-03</FONT></TD>
<TD align=middle width=73>代码作者:</TD>
<TD width=230><FONT color=#00ff00>一剑</FONT></TD></TR>
<TR>
<TD width=73>代码来源:</TD>
<TD width=231><FONT color=#00ff00>www.czvc.com</FONT></TD>
<TD align=middle width=73>文件大小:</TD>
<TD width=230><FONT color=#00ff00>63KB</FONT></TD></TR>
<TR>
<TD width=73>下载次数:</TD>
<TD width=231><FONT color=#00ff00>4543</FONT></TD>
<TD align=middle width=73>评论条数:</TD>
<TD width=230><FONT color=#00ff00>7</FONT></TD></TD></TR>
<TR>
<TD align=left width=73>代码下载:</TD>
<TD width=231><A
href="http://www.czvc.com/rar.asp?id=10&path=code/MultiView1.rar"><FONT
color=#ffff00><IMG alt=按此下载
src="如何SDI中进行多视图切换__代码下载__常州VC编程网.files/rar.gif"
border=0></FONT></A></TD>
<TD align=middle width=73>浏览次数:</TD>
<TD width=230><FONT color=#00ff00>11876</FONT></TD></TD></TR>
<TR>
<TD width=607 colSpan=4 height=8></TD></TR></TBODY></TABLE>
<TABLE style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all"
cellSpacing=0 cellPadding=2 width=607 align=center border=0>
<TBODY>
<TR>
<TD vAlign=top width=73>演示截图:</TD>
<TD width=534><IMG
src="如何SDI中进行多视图切换__代码下载__常州VC编程网.files/MultiView1.gif"
border=0></TD></TR>
<TR>
<TD width=607 colSpan=2>代码简介或代码解析:</TD></TR>
<TR>
<TD width=607 colSpan=2 height=8></TD></TR>
<TR>
<TD style="FONT-SIZE: 14px" width=607
colSpan=2> 在一些情况下,应用程序有许多信息要显示,当一个窗口内显示不下时,VC提供的MDI应用程序可以解决这个问题,但是如果应用程序只是对单个文档,采用多种方式显示,则采用SDI更合适。那么,如何在单文档应用程序中实现多视图呢?缺省情况下,派生类的构造函数是pretected类型的,必须将它改为public类型,因为我们将会动态生成派生视图类并切换活动的视图。也可以一次生成所有的视图,但是这样造成系统资源的极大浪费。<BR><BR>1 首先利用资源编辑器新建4个对话框,在对话框中添加需要的控件,各个对话框的ID分别为IDD_MULTIVIEW_FORM,IDD_MULTIVIEW_FORM2,IDD_MULTIVIEW_FORM3,IDD_MULTIVIEW_FORM4<BR><BR>2 为每一个对话框创建一个CFormView类的派生类,分别为:CView1,CView2,CView3,CView4<BR><BR>3 在应用程序的初始化文件中用CView1替换原先的视图,这样程序启动后的缺省显示视图是CView1,修改后的部分代码如下:<BR>CSingleDocTemplate* pDocTemplate;<BR>pDocTemplate = new CSingleDocTemplate(<BR>IDR_MAINFRAME,<BR>RUNTIME_CLASS(CMultiViewDoc),<BR>RUNTIME_CLASS(CMainFrame), // main SDI frame window<BR>RUNTIME_CLASS(CView1));<BR>AddDocTemplate(pDocTemplate);<BR><BR>4 利用资源编辑器,添加几个菜单,并添加相应的消息处理函数:<BR>void CMainFrame::OnViewView1() <BR>{<BR>SwitchToForm(IDD_MULTIVIEW_FORM); <BR>}<BR><BR>void CMainFrame::OnViewView2() <BR>{<BR>SwitchToForm(IDD_MULTIVIEW_FORM2); <BR>}<BR><BR>void CMainFrame::OnViewView3() <BR>{<BR>SwitchToForm(IDD_MULTIVIEW_FORM3); <BR>}<BR><BR>void CMainFrame::OnViewView4() <BR>{<BR>SwitchToForm(IDD_MULTIVIEW_FORM4); <BR>}<BR><BR>在SDI中CFrame的派生类即CMainFrame控制着所有的视图,而且它允许用户通过消息处理进行视图的切换。进行视图切换的原理很简单,只是断开和旧视图的连接并把他删除,创建一个新视图,将文档和它相连,设置几个标志,然后显示新视图,SwitchToForm函数是进行视图切换的代码函数。<BR><BR>void CMainFrame::SwitchToForm(int nForm)<BR>{<BR> //CDocument* pDoc = GetActiveDocument();<BR> CView *pOldActiveView=GetActiveView(); //保存旧视图<BR> CView *pNewActiveView=(CView*)GetDlgItem(nForm); //取得新视图<BR> if(pNewActiveView==NULL)<BR> {<BR> switch(nForm)<BR> //这些ID是对话框的标志符,但也可以用其他的标志<BR> {<BR> case IDD_MULTIVIEW_FORM :<BR> pNewActiveView=(CView*)new CView1;<BR> break;<BR> case IDD_MULTIVIEW_FORM2 :<BR> pNewActiveView=(CView*)new CView2;<BR> break;<BR> case IDD_MULTIVIEW_FORM3 :<BR> pNewActiveView=(CView*)new CView3;<BR> break;<BR> case IDD_MULTIVIEW_FORM4 :<BR> pNewActiveView=(CView*)new CView4;<BR> break;<BR> }<BR> CCreateContext context; //将文挡和视图相连<BR> context.m_pCurrentDoc=pOldActiveView->GetDocument();<BR>pNewActiveView->Create(NULL, NULL, WS_BORDER|WS_CHILD ,<BR> CFrameWnd::rectDefault, this, nForm, &context);<BR><BR><BR> pNewActiveView->OnInitialUpdate();<BR> }<BR> SetActiveView(pNewActiveView); //改变活动的视图<BR> pNewActiveView->ShowWindow(SW_SHOW); //显示新的视图<BR> pOldActiveView->ShowWindow(SW_HIDE); //隐藏旧的视图<BR><BR> if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CView1))<BR>pOldActiveView->SetDlgCtrlID(IDD_MULTIVIEW_FORM);<BR><BR>else if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CView2))<BR>pOldActiveView->SetDlgCtrlID(IDD_MULTIVIEW_FORM2);<BR><BR>else if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CView3))<BR>pOldActiveView->SetDlgCtrlID(IDD_MULTIVIEW_FORM3);<BR><BR>else if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CView4))<BR>pOldActiveView->SetDlgCtrlID(IDD_MULTIVIEW_FORM4);<BR><BR> pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);<BR> <BR> <BR><BR>delete pOldActiveView; //删除旧视图<BR><BR>RecalcLayout(); //调整框架窗口<BR>}<BR><BR></TD></TR></TBODY></TABLE><BR>
<TABLE cellSpacing=0 cellPadding=2 width="98%" align=center
border=0>
<TBODY>
<TR>
<TD>【本代码共有<FONT color=#ffff00>7</FONT>条评论信息】</TD></TR>
<TR>
<TD>
<HR color=red SIZE=1>
</TD></TR>
<TR>
<TD><IMG
src="如何SDI中进行多视图切换__代码下载__常州VC编程网.files/pot.gif"> 2004-08-05
22:56:31 本站网友【<A
href="mailto:hezhipin@sohu.com"><FONT
color=#ffff00>网事蒙尘</FONT></A>】发表评论23:<FONT
color=#ffff00>如何在分割窗口隐藏分割条和其中一个窗格</FONT></TD></TR>
<TR>
<TD>如何在分割窗口隐藏分割条和其中一个窗格<BR><BR><BR>笔者是一个VC的爱好者,对VC作界面也十分感兴趣,前一些时候看到有网友在网上问,如何隐藏分割窗口中的分割条和其<BR><BR>中一个窗格.我认为我所知道的结果都不尽人意,所以笔者就用一个模拟的方式实现了,其制作过程如下:<BR><BR>1、创建视图<BR>在CMainFrame中定义 Cmydeiview *m_myview;//设定我们要隐藏时保留的是:Cmydeiview<BR><BR><BR>BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) <BR>{<BR><BR>m_split.CreateStatic(this,1,2);<BR>m_split.CreateView(0,0,RUNTIME_CLASS(CFromView),CSize(100,200),pContext);<BR>m_split.CreateView(0,1,RUNTIME_CLASS(Cmydeiview),CSize(100,200),pContext);<BR><BR><BR>//下面的是关键之处,就是多创建一个视图<BR>m_myview=(Cmydeiview*)CreateView(pContext,hzp_view_id);<BR>m_myview->ShowWindow(false);<BR>return true;<BR>}<BR><BR><BR>2、在菜单中加入两个选项用于控制视图的显视或是隐藏<BR><BR>void CMainFrame::OnMenuitem32771() <BR>{//隐藏窗格<BR>m_myview->SetDlgCtrlID(AFX_IDW_PANE_FIRST);<BR>m_myview->ShowWindow(true);<BR>m_split.ShowWindow(false);<BR>this->RecalcLayout();<BR><BR><BR>}<BR><BR>void CMainFrame::OnMenuitem32772() <BR>{<BR>//显视窗格<BR> m_myview->SetDlgCtrlID(hzp_view_id);<BR>m_myview->ShowWindow(false);<BR>m_split.ShowWindow(true);<BR>this->RecalcLayout();<BR><BR>}<BR><BR>3、通过测试以上的作法是安全而且,实现容易的。<BR></TD></TR>
<TR>
<TD height=12></TD></TR>
<TR>
<TD><IMG
src="如何SDI中进行多视图切换__代码下载__常州VC编程网.files/pot.gif"> 2004-08-26
20:39:06 本站网友【<A
href="mailto:lostgdi731@163.com"><FONT
color=#ffff00>lostgdi</FONT></A>】发表评论30:<FONT
color=#ffff00></FONT></TD></TR>
<TR>
<TD>哪个开关函数有问题。<BR>来个简单的实验:<BR>在哪个函数的switch里插入一句AfxMessageBox("hehe");<BR>case IDD_MULTIVIEW_FORM2 :<BR> pNewActiveView=(CView*)new CView2;<BR>AfxMessageBox("hehe");<BR> break;<BR>预期是afxmessagebox只执行一次的,现在却是两次。</TD></TR>
<TR>
<TD height=12></TD></TR>
<TR>
<TD><IMG
src="如何SDI中进行多视图切换__代码下载__常州VC编程网.files/pot.gif"> 2005-09-15
21:05:48 本站网友【<A
href="mailto:cnzwang@gmail.com"><FONT color=#ffff00>zhi
wang</FONT></A>】发表评论154:<FONT color=#ffff00>请教</FONT></TD></TR>
<TR>
<TD>如和使用OnDraw函数<BR>我想在每个视中画图或显示不同内容<BR>请指点</TD></TR>
<TR>
<TD height=12></TD></TR>
<TR>
<TD><IMG
src="如何SDI中进行多视图切换__代码下载__常州VC编程网.files/pot.gif"> 2006-02-26
00:57:25 本站网友【<A href="mailto:"><FONT
color=#ffff00>HJH</FONT></A>】发表评论229:<FONT
color=#ffff00>怎么用这个静态方法切换视图,鼠标事件不响应了?</FONT></TD></TR>
<TR>
<TD>谁知道是什么原因啊?谢谢!</TD></TR>
<TR>
<TD height=12></TD></TR>
<TR>
<TD><IMG
src="如何SDI中进行多视图切换__代码下载__常州VC编程网.files/pot.gif"> 2006-04-16
10:32:08 本站网友【<A href="mailto:"><FONT
color=#ffff00>windy</FONT></A>】发表评论269:<FONT
color=#ffff00>视图的大小</FONT></TD></TR>
<TR>
<TD>请问如何用程序改变视图窗的大小呢?</TD></TR>
<TR>
<TD height=12></TD></TR>
<TR>
<TD align=right>【<A
href="http://www.czvc.com/recode.asp?id=10"><FONT
color=#ffff00>查看更多评论</FONT></A>】 【<A
href="http://www.czvc.com/recode.asp?id=10#send"><FONT
color=#ffff00>我来说两句</FONT></A>】 【<A
href="http://www.czvc.com/send.asp?id=10&type=3"><FONT
color=#ffff00>推荐信息</FONT></A>】 【<A
href="javascript:window.print()"><FONT
color=#ffff00>打印本页</FONT></A>】 【<A
href="javascript:window.close()"><FONT
color=#ffff00>关闭窗口</FONT></A>】</TD></TR>
<TR>
<TD height=8></TD></TR></TBODY></TABLE></TD>
<TD width=5
background=如何SDI中进行多视图切换__代码下载__常州VC编程网.files/back2.gif> </TD></TR>
<TR>
<TD background=如何SDI中进行多视图切换__代码下载__常州VC编程网.files/back2.gif colSpan=3
height=5></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=8 width=759 align=center border=0>
<TBODY>
<TR>
<TD align=middle height=30>Copyright © <A
href="http://www.czvc.com/index.asp" target=_self><FONT
color=#ffff00>CZVC.com</FONT></A> 2002-2006 <A
href="mailto:info@czvc.com"><FONT color=#ffff00>一剑</FONT></A>
[QQ:28077188] All Rights
Reserved.<BR>本站由北京市通信公司提供网络支持</TD></TR></TBODY></TABLE></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -