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

📄 如何sdi中进行多视图切换__代码下载__常州vc编程网.htm

📁 窗体分割文档
💻 HTM
📖 第 1 页 / 共 3 页
字号:
            color=#ffff00>本站首页</FONT></A>&nbsp;&gt;&gt;&nbsp;<A 
            href="http://www.czvc.com/code.asp"><FONT 
            color=#ffff00>代码下载</FONT></A>&nbsp;&gt;&gt;&nbsp;<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>&nbsp;</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&amp;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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在一些情况下,应用程序有许多信息要显示,当一个窗口内显示不下时,VC提供的MDI应用程序可以解决这个问题,但是如果应用程序只是对单个文档,采用多种方式显示,则采用SDI更合适。那么,如何在单文档应用程序中实现多视图呢?缺省情况下,派生类的构造函数是pretected类型的,必须将它改为public类型,因为我们将会动态生成派生视图类并切换活动的视图。也可以一次生成所有的视图,但是这样造成系统资源的极大浪费。<BR><BR>1&nbsp;&nbsp;首先利用资源编辑器新建4个对话框,在对话框中添加需要的控件,各个对话框的ID分别为IDD_MULTIVIEW_FORM,IDD_MULTIVIEW_FORM2,IDD_MULTIVIEW_FORM3,IDD_MULTIVIEW_FORM4<BR><BR>2&nbsp;&nbsp;为每一个对话框创建一个CFormView类的派生类,分别为:CView1,CView2,CView3,CView4<BR><BR>3&nbsp;&nbsp;在应用程序的初始化文件中用CView1替换原先的视图,这样程序启动后的缺省显示视图是CView1,修改后的部分代码如下:<BR>CSingleDocTemplate*&nbsp;pDocTemplate;<BR>pDocTemplate&nbsp;=&nbsp;new&nbsp;CSingleDocTemplate(<BR>IDR_MAINFRAME,<BR>RUNTIME_CLASS(CMultiViewDoc),<BR>RUNTIME_CLASS(CMainFrame),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;main&nbsp;SDI&nbsp;frame&nbsp;window<BR>RUNTIME_CLASS(CView1));<BR>AddDocTemplate(pDocTemplate);<BR><BR>4&nbsp;&nbsp;利用资源编辑器,添加几个菜单,并添加相应的消息处理函数:<BR>void&nbsp;CMainFrame::OnViewView1()&nbsp;<BR>{<BR>SwitchToForm(IDD_MULTIVIEW_FORM);&nbsp;&nbsp;&nbsp;<BR>}<BR><BR>void&nbsp;CMainFrame::OnViewView2()&nbsp;<BR>{<BR>SwitchToForm(IDD_MULTIVIEW_FORM2);&nbsp;&nbsp;&nbsp;<BR>}<BR><BR>void&nbsp;CMainFrame::OnViewView3()&nbsp;<BR>{<BR>SwitchToForm(IDD_MULTIVIEW_FORM3);&nbsp;&nbsp;&nbsp;<BR>}<BR><BR>void&nbsp;CMainFrame::OnViewView4()&nbsp;<BR>{<BR>SwitchToForm(IDD_MULTIVIEW_FORM4);&nbsp;&nbsp;&nbsp;<BR>}<BR><BR>在SDI中CFrame的派生类即CMainFrame控制着所有的视图,而且它允许用户通过消息处理进行视图的切换。进行视图切换的原理很简单,只是断开和旧视图的连接并把他删除,创建一个新视图,将文档和它相连,设置几个标志,然后显示新视图,SwitchToForm函数是进行视图切换的代码函数。<BR><BR>void&nbsp;CMainFrame::SwitchToForm(int&nbsp;nForm)<BR>{<BR>&nbsp;&nbsp;//CDocument*&nbsp;pDoc&nbsp;=&nbsp;GetActiveDocument();<BR>&nbsp;&nbsp;&nbsp;&nbsp;CView&nbsp;*pOldActiveView=GetActiveView();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//保存旧视图<BR>&nbsp;&nbsp;&nbsp;&nbsp;CView&nbsp;*pNewActiveView=(CView*)GetDlgItem(nForm);&nbsp;&nbsp;&nbsp;//取得新视图<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(pNewActiveView==NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(nForm)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//这些ID是对话框的标志符,但也可以用其他的标志<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;IDD_MULTIVIEW_FORM&nbsp;:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pNewActiveView=(CView*)new&nbsp;CView1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;IDD_MULTIVIEW_FORM2&nbsp;:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pNewActiveView=(CView*)new&nbsp;CView2;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;IDD_MULTIVIEW_FORM3&nbsp;:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pNewActiveView=(CView*)new&nbsp;CView3;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;IDD_MULTIVIEW_FORM4&nbsp;:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pNewActiveView=(CView*)new&nbsp;CView4;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CCreateContext&nbsp;context;&nbsp;&nbsp;&nbsp;//将文挡和视图相连<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;context.m_pCurrentDoc=pOldActiveView-&gt;GetDocument();<BR>pNewActiveView-&gt;Create(NULL,&nbsp;NULL,&nbsp;WS_BORDER|WS_CHILD&nbsp;,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CFrameWnd::rectDefault,&nbsp;this,&nbsp;nForm,&nbsp;&amp;context);<BR><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pNewActiveView-&gt;OnInitialUpdate();<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;SetActiveView(pNewActiveView);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//改变活动的视图<BR>&nbsp;&nbsp;&nbsp;&nbsp;pNewActiveView-&gt;ShowWindow(SW_SHOW);&nbsp;&nbsp;//显示新的视图<BR>&nbsp;&nbsp;&nbsp;&nbsp;pOldActiveView-&gt;ShowWindow(SW_HIDE);&nbsp;&nbsp;//隐藏旧的视图<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;if(pOldActiveView-&gt;GetRuntimeClass()&nbsp;==RUNTIME_CLASS(CView1))<BR>pOldActiveView-&gt;SetDlgCtrlID(IDD_MULTIVIEW_FORM);<BR><BR>else&nbsp;if(pOldActiveView-&gt;GetRuntimeClass()&nbsp;==RUNTIME_CLASS(CView2))<BR>pOldActiveView-&gt;SetDlgCtrlID(IDD_MULTIVIEW_FORM2);<BR><BR>else&nbsp;if(pOldActiveView-&gt;GetRuntimeClass()&nbsp;==RUNTIME_CLASS(CView3))<BR>pOldActiveView-&gt;SetDlgCtrlID(IDD_MULTIVIEW_FORM3);<BR><BR>else&nbsp;if(pOldActiveView-&gt;GetRuntimeClass()&nbsp;==RUNTIME_CLASS(CView4))<BR>pOldActiveView-&gt;SetDlgCtrlID(IDD_MULTIVIEW_FORM4);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;pNewActiveView-&gt;SetDlgCtrlID(AFX_IDW_PANE_FIRST);<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR><BR>delete&nbsp;pOldActiveView;&nbsp;&nbsp;&nbsp;//删除旧视图<BR><BR>RecalcLayout();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//调整框架窗口<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">&nbsp;2004-08-05 
                  22:56:31&nbsp;&nbsp;本站网友【<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中定义&nbsp;Cmydeiview&nbsp;*m_myview;//设定我们要隐藏时保留的是:Cmydeiview<BR><BR><BR>BOOL&nbsp;CMainFrame::OnCreateClient(LPCREATESTRUCT&nbsp;lpcs,&nbsp;CCreateContext*&nbsp;pContext)&nbsp;<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-&gt;ShowWindow(false);<BR>return&nbsp;true;<BR>}<BR><BR><BR>2、在菜单中加入两个选项用于控制视图的显视或是隐藏<BR><BR>void&nbsp;CMainFrame::OnMenuitem32771()&nbsp;<BR>{//隐藏窗格<BR>m_myview-&gt;SetDlgCtrlID(AFX_IDW_PANE_FIRST);<BR>m_myview-&gt;ShowWindow(true);<BR>m_split.ShowWindow(false);<BR>this-&gt;RecalcLayout();<BR><BR><BR>}<BR><BR>void&nbsp;CMainFrame::OnMenuitem32772()&nbsp;<BR>{<BR>//显视窗格<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_myview-&gt;SetDlgCtrlID(hzp_view_id);<BR>m_myview-&gt;ShowWindow(false);<BR>m_split.ShowWindow(true);<BR>this-&gt;RecalcLayout();<BR><BR>}<BR><BR>3、通过测试以上的作法是安全而且,实现容易的。<BR></TD></TR>
              <TR>
                <TD height=12></TD></TR>
              <TR>
                <TD><IMG 
                  src="如何SDI中进行多视图切换__代码下载__常州VC编程网.files/pot.gif">&nbsp;2004-08-26 
                  20:39:06&nbsp;&nbsp;本站网友【<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&nbsp;IDD_MULTIVIEW_FORM2&nbsp;:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pNewActiveView=(CView*)new&nbsp;CView2;<BR>AfxMessageBox("hehe");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>预期是afxmessagebox只执行一次的,现在却是两次。</TD></TR>
              <TR>
                <TD height=12></TD></TR>
              <TR>
                <TD><IMG 
                  src="如何SDI中进行多视图切换__代码下载__常州VC编程网.files/pot.gif">&nbsp;2005-09-15 
                  21:05:48&nbsp;&nbsp;本站网友【<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">&nbsp;2006-02-26 
                  00:57:25&nbsp;&nbsp;本站网友【<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">&nbsp;2006-04-16 
                  10:32:08&nbsp;&nbsp;本站网友【<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>】&nbsp;&nbsp;【<A 
                  href="http://www.czvc.com/recode.asp?id=10#send"><FONT 
                  color=#ffff00>我来说两句</FONT></A>】&nbsp;&nbsp;【<A 
                  href="http://www.czvc.com/send.asp?id=10&amp;type=3"><FONT 
                  color=#ffff00>推荐信息</FONT></A>】&nbsp;&nbsp;【<A 
                  href="javascript:window.print()"><FONT 
                  color=#ffff00>打印本页</FONT></A>】&nbsp;&nbsp;【<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>&nbsp;</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 &copy; <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 + -