📄 chap8_5.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">
</head>
<body link="#3973DE" alink="#3973DE">
<font SIZE="5"><b><div align="center"><center>
<table border="0" width="615" cellspacing="0" cellpadding="0">
<tr>
</b><td><div align="center"><center><table border="0" width="615" cellpadding="0" cellspacing="0" height="20">
<tr>
<td width="377" bgcolor="#15397D" height="20"></td>
<td width="238" bgcolor="#000000" height="20"><p align="right"></font><span style="text-decoration: none"><a href="../../index.htm"><font color="#FFFFFF">电脑报Visual
C++网络教程</font></a></span></td>
</tr>
</table>
</center></div><font FACE="Times New Roman" SIZE="4"><b><p ALIGN="CENTER"></b></font><font color="#3973DE" FACE="Times New Roman" SIZE="4">8.5</font><font SIZE="4" color="#3973DE">分割视图</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">分割窗口将窗口分成几个部分,每个部分通常代表一个视图(但也可以是具有子窗口标识的</font><font FACE="Times New Roman" SIZE="3">CWnd</font><font SIZE="3">对象),又称窗格。如图</font><font FACE="Times New Roman" SIZE="3">8-8</font><font SIZE="3">所示。如果想在一个窗口里面观察文档的不同部分,或者是在一个窗口里用不同类型的视图(比如用图表和表格)观察同一个文档,那么采用分割窗口是非常方便的。许多优秀的软件都采用了分割窗口技术,因此我们有必要掌握分割窗口的用法。</font><font FACE="Times New Roman" SIZE="3"></p>
<p align="center"></font><img src="T8_8.gif" alt="T8_8.tif (313144 bytes)" WIDTH="546" HEIGHT="345"><font FACE="Times New Roman" SIZE="3"></p>
<p align="center"></font><font SIZE="3">图</font><font FACE="Times New Roman" SIZE="3">8-8
</font><font SIZE="3">分割窗口</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">分割窗口分为两类:动态分割窗口和静态分割窗口。</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">动态分割窗口是指:用户可以动态的分割和除去分割窗口,分割窗口会创建和删除相应的窗格。</font><font FACE="Times New Roman" SIZE="3">Microsoft Word</font><font SIZE="3">就是使用动态分割窗口的例子,这是一种最常用的分割窗口。动态分割窗口最多可以有</font><font FACE="Times New Roman" SIZE="3">2</font><font SIZE="3">行<font FACE="Symbol">´</font>
</font><font FACE="Times New Roman" SIZE="3">2</font><font SIZE="3">列个窗格。</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">静态分割窗口是指:在窗口创建时,分割窗口的窗格就已经创建好了,且窗格的数量和顺序不会改变。窗格为一个分割条所分割,用户可以拖动分割条调整相应的窗格的大小。如图</font><font FACE="Times New Roman" SIZE="3">8-9</font><font SIZE="3">,</font><font FACE="Times New Roman" SIZE="3">Visual Studio</font><font SIZE="3">的图标编辑器就是静态分割窗口的例子。在编辑器的左边窗格,显示图标的缩微图像,在右边显示图标的编辑窗口,可以拖动中间的分割条调整两个窗格的大小。静态分割窗口最多可以有</font><font FACE="Times New Roman" SIZE="3">16</font><font SIZE="3">行<font FACE="Symbol">´</font>
</font><font FACE="Times New Roman" SIZE="3">16</font><font SIZE="3">列的窗格。</font><font FACE="Times New Roman" SIZE="3"></p>
<p align="center"></font><img src="T8_9.gif" alt="T8_9.tif (295722 bytes)" WIDTH="484" HEIGHT="313"><font FACE="Times New Roman" SIZE="3"></p>
<p align="center"></font><font SIZE="3">图</font><font FACE="Times New Roman" SIZE="3">8-9
</font><font SIZE="3">图标编辑器—静态分割窗口的例子</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">这里我们只介绍动态分割窗口的使用,有关静态分割窗口的用法,读者可以参考</font><font FACE="Times New Roman" SIZE="3">Visual C++</font><font SIZE="3">的例子</font><font FACE="Times New Roman" SIZE="3">VIEWEX</font><font SIZE="3">,它在</font><font FACE="Times New Roman" SIZE="3">SAMPLES\MFC\GENERAL \VIEWEX</font><font SIZE="3">目录下。</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">要使文档视结构程序支持动态分割窗口,可以有三种方法:</font><font FACE="Times New Roman" SIZE="3"></p>
<p>1.</font><font SIZE="3">在用</font><font FACE="Times New Roman" SIZE="3">AppWizard</font><font SIZE="3">创建窗口时指定分割窗口风格:</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">在</font><font FACE="Times New Roman" SIZE="3">MFC AppWizard
Step 4 of 6</font><font SIZE="3">对话框中,点</font><font FACE="Times New Roman" SIZE="3">Advanced</font><font SIZE="3">按钮。弹出</font><font FACE="Times New Roman" SIZE="3">Advanced Options</font><font SIZE="3">对话框,选择</font><font FACE="Times New Roman" SIZE="3">Window Styles</font><font SIZE="3">标签页。如图</font><font FACE="Times New Roman" SIZE="3">8-10</font><font SIZE="3">,选中该页的</font><font FACE="Times New Roman" SIZE="3">Use Split Window</font><font SIZE="3">检查框。这样生成的应用程序就自动支持分割窗口功能。</font><font FACE="Times New Roman" SIZE="3"></p>
<p align="center"></font><img src="T8_10.gif" alt="T8_10.tif (323220 bytes)" WIDTH="465" HEIGHT="488"><font FACE="Times New Roman" SIZE="3"></p>
<p align="center"></font><font SIZE="3">图</font><font FACE="Times New Roman" SIZE="3">8-10
Window Styles</font><font SIZE="3">设置</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">如果应用程序已经生成,采用这种方法就不合适了。此时,可以使用下面的两种方法:</font><font FACE="Times New Roman" SIZE="3"></p>
<p>2.</font><font SIZE="3">使用</font><font FACE="Times New Roman" SIZE="3">Component
Gallery</font><font SIZE="3">为已经生成的应用程序增加分割窗口功能:</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">打开相应的工程文件。选择</font><font FACE="Times New Roman" SIZE="3">Project-Add To Project-Components and controls</font><font SIZE="3">菜单,弹出</font><font FACE="Times New Roman" SIZE="3"></p>
<p>Components and controls Gallery</font><font SIZE="3">对话框。双击</font><font FACE="Times New Roman" SIZE="3">Developer Studio Components</font><font SIZE="3">目录,从该目录下选择</font><font FACE="Times New Roman" SIZE="3">split Bars</font><font SIZE="3">控件。</font><font FACE="Times New Roman" SIZE="3">Visual C++</font><font SIZE="3">提示</font><font FACE="Times New Roman" SIZE="3">split Bar</font><font SIZE="3">对话框,对话框内有三个选项:</font><font FACE="Times New Roman" SIZE="3">Horizontal</font><font SIZE="3">,</font><font FACE="Times New Roman" SIZE="3">Vertical</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">Both</font><font SIZE="3">,用于指定在水平方向、垂直方向还是两个方向都使用分割窗口。选择</font><font FACE="Times New Roman" SIZE="3">Both</font><font SIZE="3">,点</font><font FACE="Times New Roman" SIZE="3">OK</font><font SIZE="3">关闭</font><font FACE="Times New Roman" SIZE="3">Split Bar</font><font SIZE="3">对话框,此时</font><font FACE="Times New Roman" SIZE="3">Component Gallery</font><font SIZE="3">就将分割窗口功能添加到了</font><font FACE="Times New Roman" SIZE="3">Draw</font><font SIZE="3">程序中。再点</font><font FACE="Times New Roman" SIZE="3">OK</font><font SIZE="3">关闭</font><font FACE="Times New Roman" SIZE="3">Components and controls Gallery</font><font SIZE="3">对话框。然后浏览应用程序类,看有什么变化。</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">在</font><font FACE="Times New Roman" SIZE="3">childfrm.h</font><font SIZE="3">中,增加了以下内容:</font><font FACE="Times New Roman" SIZE="3"></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</font><font SIZE="3">是一个</font><font FACE="Times New Roman" SIZE="3">CSplitterWnd</font><font SIZE="3">类的对象。</font><font FACE="Times New Roman" SIZE="3">CSplitterWnd</font><font SIZE="3">是</font><font FACE="Times New Roman" SIZE="3">MFC</font><font SIZE="3">提供的一个类,它提供了窗格分割控制,以及能被所有同一行或列上的窗格共享的滚动条。这些行和列的值都是从</font><font FACE="Times New Roman" SIZE="3">0</font><font SIZE="3">开始的整数,第一个窗格的行数和列数都为</font><font FACE="Times New Roman" SIZE="3">0</font><font SIZE="3">。</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">另外还重载了子框架窗口的</font><font FACE="Times New Roman" SIZE="3">OnCreateClient</font><font SIZE="3">方法。在该函数内部,创建了分割窗口控制:</font><font FACE="Times New Roman" SIZE="3"></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("Failed to create split bar ");</p>
<p>return FALSE; // failed to create</p>
<p>}</p>
<p>return TRUE;</p>
<p>}</p>
<p>}</p>
<p>CSplitterWnd::Create</font><font SIZE="3">方法带五个参数,第一个参数代表父窗口指针,第二个参数和第三个参数告诉</font><font FACE="Times New Roman" SIZE="3">CSplitterWnd</font><font SIZE="3">要多少行、多少列的窗格,第四个参数是一个</font><font FACE="Times New Roman" SIZE="3">CSize</font><font SIZE="3">类型的数据,用于指定窗格的最小大小。</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">第三种方法是手工加入代码:</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">在需要分割视图的框架窗口中加入一个</font><font FACE="Times New Roman" SIZE="3">CSplitterWnd</font><font SIZE="3">类型的数据成员;用</font><font FACE="Times New Roman" SIZE="3">ClassWizard</font><font SIZE="3">重载框架窗口的</font><font FACE="Times New Roman" SIZE="3">OnCreateClient</font><font SIZE="3">方法,在</font><font FACE="Times New Roman" SIZE="3">OnCreateClient</font><font SIZE="3">方法的实现中,加入上面的代码</font><font FACE="Times New Roman" SIZE="4"><b></p>
</b></font><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>
</center></div><font SIZE="5"><hr noshade color="#3973DE" size="1">
<p align="center"></font><font size="2" color="#000000">本教程由<a href="http://vcdynasty.yeah.net">Visual C++王朝(Where programmers come together)</a>协助制作<br>
未经许可,请勿以任何形式复制</font></td>
<b>
</tr>
</table>
</center></div>
<p ALIGN="CENTER"></b><font SIZE="5"> </font><font FACE="Times New Roman" SIZE="5"></p>
</font><font FACE="Times New Roman" SIZE="3">
<p></font><b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
</font></b>
<p><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p></font> </p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -