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

📄 chap8_5.htm

📁 vc教程,真正的程序员用Visual C++。如果你想当程序员
💻 HTM
字号:
<html>

<head>
<title>8.5分割视图</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<link rel="stylesheet" href="../../../cpcw.css"></head>

<body link="#3973DE" alink="#3973DE" background="../../bg.gif">
<div align="center"><center>
    <table width="85%" border="0">
      <tr bgcolor="#FFFFFF"> 
        <td> 
          <p align="CENTER"><font color="red"><b>8.5分割视图</b></font></p>
          <p>   分割窗口将窗口分成几个部分,每个部分通常代表一个视图(但也可以是具有子窗口标识的CWnd对象),又称窗格。如图8-8所示。如果想在一个窗口里面观察文档的不同部分,或者是在一个窗口里用不同类型的视图(比如用图表和表格)观察同一个文档,那么采用分割窗口是非常方便的。许多优秀的软件都采用了分割窗口技术,因此我们有必要掌握分割窗口的用法。</p>
          <p align="center"> <img src="T8_8.gif" alt="T8_8.tif (313144 bytes)" width="546" height="345"></p>
          <p align="center"> 图8-8 
            分割窗口</p>
          <p> 分割窗口分为两类:动态分割窗口和静态分割窗口。</p>
          <p> 动态分割窗口是指:用户可以动态的分割和除去分割窗口,分割窗口会创建和删除相应的窗格。Microsoft Word就是使用动态分割窗口的例子,这是一种最常用的分割窗口。动态分割窗口最多可以有2行&acute; 
            2列个窗格。</p>
          <p> 静态分割窗口是指:在窗口创建时,分割窗口的窗格就已经创建好了,且窗格的数量和顺序不会改变。窗格为一个分割条所分割,用户可以拖动分割条调整相应的窗格的大小。如图8-9,Visual 
            Studio的图标编辑器就是静态分割窗口的例子。在编辑器的左边窗格,显示图标的缩微图像,在右边显示图标的编辑窗口,可以拖动中间的分割条调整两个窗格的大小。静态分割窗口最多可以有16行&acute; 
            16列的窗格。</p>
          <p align="center"> <img src="T8_9.gif" alt="T8_9.tif (295722 bytes)" width="484" height="313"></p>
          <p align="center"> 图8-9 
            图标编辑器—静态分割窗口的例子</p>
          <p> 这里我们只介绍动态分割窗口的使用,有关静态分割窗口的用法,读者可以参考Visual 
            C++的例子VIEWEX,它在SAMPLES\MFC\GENERAL 
            \VIEWEX目录下。</p>
          <p> 要使文档视结构程序支持动态分割窗口,可以有三种方法:</p>
          <p> 1.在用AppWizard创建窗口时指定分割窗口风格:</p>
          <p> 在MFC 
            AppWizard Step 4 of 6对话框中,点Advanced按钮。弹出Advanced 
            Options对话框,选择Window 
            Styles标签页。如图8-10,选中该页的Use 
            Split Window检查框。这样生成的应用程序就自动支持分割窗口功能。</p>
          <p align="center"> <img src="T8_10.gif" alt="T8_10.tif (323220 bytes)" width="465" height="488"></p>
          <p align="center"> 图8-10 
            Window Styles设置</p>
          <p> 如果应用程序已经生成,采用这种方法就不合适了。此时,可以使用下面的两种方法:</p>
          <p> 2.使用Component 
            Gallery为已经生成的应用程序增加分割窗口功能:</p>
          <p> 打开相应的工程文件。选择Project-Add 
            To Project-Components and controls菜单,弹出</p>
          <p> Components and controls Gallery对话框。双击Developer 
            Studio Components目录,从该目录下选择split 
            Bars控件。Visual 
            C++提示split 
            Bar对话框,对话框内有三个选项:Horizontal,Vertical和Both,用于指定在水平方向、垂直方向还是两个方向都使用分割窗口。选择Both,点OK关闭Split 
            Bar对话框,此时Component 
            Gallery就将分割窗口功能添加到了Draw程序中。再点OK关闭Components 
            and controls Gallery对话框。然后浏览应用程序类,看有什么变化。</p>
          <p> 在childfrm.h中,增加了以下内容:</p>
           
          <p>// Generated message map functions</p>
          <p>protected:</p>
          <p>CSplitterWnd m_wndSplitter;</p>
          <p>virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* 
            pContext);</p>
          
          <p>m_wndSplitter是一个CSplitterWnd类的对象。CSplitterWnd是MFC提供的一个类,它提供了窗格分割控制,以及能被所有同一行或列上的窗格共享的滚动条。这些行和列的值都是从0开始的整数,第一个窗格的行数和列数都为0。</p>
          <p> 另外还重载了子框架窗口的OnCreateClient方法。在该函数内部,创建了分割窗口控制:</p>
           
          <p>BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* 
            pContext)</p>
          <p>{</p>
          <p>// CG: The following block was added by the Split Bars component.</p>
          <p>{</p>
          <p>if (!m_wndSplitter.Create(this,</p>
          <p>2, 2, // TODO: adjust the number of rows, columns</p>
          <p>CSize(10, 10), // TODO: adjust the minimum pane size</p>
          <p>pContext))</p>
          <p>{</p>
          <p>TRACE0(&quot;Failed to create split bar &quot;);</p>
          <p>return FALSE; // failed to create</p>
          <p>}</p>
          <p>return TRUE;</p>
          <p>}</p>
          <p>}</p>
          
          <p>CSplitterWnd::Create方法带五个参数,第一个参数代表父窗口指针,第二个参数和第三个参数告诉CSplitterWnd要多少行、多少列的窗格,第四个参数是一个CSize类型的数据,用于指定窗格的最小大小。</p>
          <p> 第三种方法是手工加入代码:</p>
          <p> 在需要分割视图的框架窗口中加入一个CSplitterWnd类型的数据成员;用ClassWizard重载框架窗口的OnCreateClient方法,在OnCreateClient方法的实现中,加入上面的代码</p>
          <div align="center">
            <center>
              <table border="0" cellpadding="0" cellspacing="0" width="615">
                <tr> 
                  <td><a href="chap8_4.htm">上一页</a></td>
                  <td>
                    <p align="right"><a href="chap8_6.htm">下一页</a>
                  </td>
                </tr>
              </table>
              <p><a href="http://www.cpcw.com">电脑报首页</a> <a href="../../index.htm">网络学院首页</a> 
              </p>
              </center>
          </div>
          <p>&nbsp;</p><hr noshade color="#3973DE" size="1">
          
          <p align="center">本教程由<a href="http://vcdynasty.yeah.net">Visual C++王朝(Where 
            programmers come together)</a>协助制作<br>
            未经许可,请勿以任何形式复制
        </td>
      </tr>
    </table>
    </center>
</div>

</body>
</html>

⌨️ 快捷键说明

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