📄 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">
<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行´
2列个窗格。</p>
<p> 静态分割窗口是指:在窗口创建时,分割窗口的窗格就已经创建好了,且窗格的数量和顺序不会改变。窗格为一个分割条所分割,用户可以拖动分割条调整相应的窗格的大小。如图8-9,Visual
Studio的图标编辑器就是静态分割窗口的例子。在编辑器的左边窗格,显示图标的缩微图像,在右边显示图标的编辑窗口,可以拖动中间的分割条调整两个窗格的大小。静态分割窗口最多可以有16行´
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("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方法带五个参数,第一个参数代表父窗口指针,第二个参数和第三个参数告诉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> </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 + -