MFC 分割窗体(Splitter Windows)
<reference MSDN Microsoft Foundation Class Library and Templates TNO 029>
文档描述MFC中的CSplitterWnd类,该类用来支持窗体的分割和管理分割后每一个子窗格(pane)的大小
1 分割窗体风格(Splitter Styles)
CSplitterWnd类支持2种不同风格的分割窗口
1.1 静态分割(static splitter)
分割的窗格(pane)在分割窗体(splitter window;)创建时创建,而且顺序,数量不会变化,分割控制条(Splitter Bar)用来控制每个窗格的大小.通常不同的窗格是不同的视图类(view class);
例如 Visual C++graphics 和 Windows文件管理器就是这个风格的分割窗体;
该风格分割窗体不会用到分割格(splitter box)
1.2 动态分割(dynamic splitter)
当用户控制视图的分割或停止分割, 附加窗格会被创建或销毁; 这种动态分割开始于一个单独的视图,分割格(splitter box)用于初始化分割;当一个视图可以在2个方向上被分割时,会有3个新的视图被创建并显示为3个新的窗格;当分割(split)被激活(active)时,分割格(splitter box)会如同分割控制条(splitter bar)一样在各个窗格间被绘制;当用户除去分割时,附加窗格会被销毁,只有原来的视图(分割时位于0行0列位置的窗格)会被保留直到分割窗体本身被销毁;
例如 Microsoft Excel 和 Microsoft Word都是这种风格的分割窗体;
当创建任意一种风格的分割窗体时,必须给定分割窗体的最大的行列数;
静态风格的分割窗体,每个窗格必须被创建CSplitterWnd::CreateView;
动态风格的分割窗体 第一个窗格会在CSplitterWnd对象创建被自动创建
静态风格的分割窗体的最大行列数为 16 x 16
动态风格的分割窗体的最大行列数为 2 x 2
推荐的分割方式为:
1 X 2 2 X 1 2 X 2
2 分割窗体的例子(Splitter Samples)
很多MFC的列子程序都直接或间接的用到了分割窗体 MFC入门程序Scripple程序的第4 部中就用到动态切分窗体
MFC标准示例中ViewEx展示静态使用切分窗体的方法,包括如何在一个切分窗体中包含另一个切分窗体
3 分割窗体中使用的术语(Terminology Used By Implement)
CsplitterWnd(分割窗体):
负责提供窗格切分空间和滚动条(同行(row)共享竖直滚动条(Vertical ScrollBar),同列(column)共享水平滚动条(Horizontal ScrollBar) );同时行列的下标从0, 0开始,言即第一个窗格为第0行 第0列的窗格
Pane(窗格)
CSplitterWnd管理的应用程序显示数据的窗体,一般而言窗格是一个视图的派生类对象,实际上窗格可以是任意的从CWnd中派生的对象;
Splitter Bar(分割控制条)
在窗格行列间的控件,用于控制行列上窗格的大小
Spliiter Box(分割格)
动态分割窗体位于竖直滚动条最上的或水平滚动条最左位置的按键,用于创建新的分割窗格
Splitter Intersection(分割交叉点)
竖直或水平分割控制条的交叉点,可用于同步控制水平,竖直窗格的大小
4 共享滚动条(Shared Scroll Bars)
CSplitterWnd支持共享滚动条,滚动条是CSplitterWnd的子窗体并且在分割窗体中为不同的窗格所共享;
如在创建1X 2 CSplitterWnd时声明了WS_VSCROLL分割 那么2个窗格共享的竖直滚动条会创建如:
[ ][ ][^]
[pane00][pane01][|]
[ ][ ][v]
当移动滚动条时,WM_VSCROLL消息会发送到2个窗格中同样,同列的窗格可以共享水平滚动条
注意
在分割窗体中共享滚动条是非常有用的,如果是2种不同的视图使用共享滚动条 那么就必须要协调滚动位置和视图的显示;所有视图的派生类可以通过CWnd中的操作ScrollBar的方法来控制共享滚动条,但是一些非视图派生类,没有使用ScrollBar控件的类 或 通过标准Window的实现方法的类如CEditView将不适合于共享滚动条
5 最小大小(Minimum size)
在分割窗体中每一行都有最小高度限制,每一列都有最小宽度限制,这2个最小值用于控制窗格显示数据最小大小;
静态分割窗体的最小大小为 0,0; 动态分割窗体的最小大小可以在CSplitterWnd::创建时设定;
这些值可以同过SetColumnInfo 和 SetRowInfo来改变;
6 未公布的接口函数(protected interface)
以下将讨论一些未公布的CSplitterWnd的技术细节以便高级用户来定制CSplitterWnd;
这些API没有官方文档公布同时在将来版本的MFC中极可能会被改变:
6.1 分割控制条(splitter bar)分割格(box) 和 分割位置跟踪(tracker)的绘制
enum ESplitType { splitBox, splitBar, splitIntersection, splitBorder };virtual void OnDrawSplitter(CDC* pDC, ESplitType nType, const CRect& rect);virtual void OnInvertTracker(const CRect& rect);这些虚函数可以用来实现不同图形表现的分割窗体
6.2 创建视图和控件
virtual BOOL CreateScrollBarCtrl(DWORD dwStyle, UINT nID);默认行为时创建滚动条,但是可以重载用于在滚动条边创建新控件
6.3 动态切分窗体
virtual void DeleteView(int row, int col);virtual BOOL SplitRow(int cyBefore);virtual BOOL SplitColumn(int cxBefore);virtual void DeleteRow(int row);virtual void DeleteColumn(int row);用于实现动态分割窗体的逻辑(当分割窗体拥有风格SPLS_DYNAMIC_SPLIT时)
分享到:
相关推荐
MFC文档视图结构分割窗体
这个C#小项目是我凌晨两点做梦突然想到的。 splitter控件在使用过程一直不起作用和没有达到分割的效果,是有...splitter不但是实现正常的左右分割窗体,还是实现上下分割窗体。 小项目添加了双击,隐藏下面窗体的功能。
在Visual C++的MFC中,用SplitterWnd函数,实现对窗口的任意分割。
分割视图Splitter_demo.zip,即是分割基于单文档的MFC程序.
MFC单文档多视图程序设计与Splitter拆分窗口实践
主要介绍了MFC Frame-Splitter模型实例原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
MP3分割 工具 MP3SPLITTER
FileSplitter文件分割合并 FileSplitter文件分割合并 FileSplitter文件分割合并 FileSplitter文件分割合并 FileSplitter文件分割合并
MP3 Splitter & Joiner 是一款 MP3 文件分割与合并软件。它可以快速将单个 MP3 分割为多个文件或将多个 MP3 合并为单个文件。通过内置播放器,您可以在对 MP3 进行分割或合并前进行预览。软件支持多种 MP3 分割方式...
文件分割 FileSplitter 大型文件的切割专家。随着应用程序不断的开发,文件也随之变得越来大了,很可能您在Word文件文件中加上几张图片,文件就会大过一张磁盘了,如果您想要让您这庞大的文件可以透过磁盘片转送或者...
Boilsoft Video Splitter是一款分割速度最快的媒体分割器,既可分割视频文件,也可分割音频文件。 Boilsoft Video Splitter支持分割 AVI, MPEG, RM, ASF, WMV, 3GP, MKV, FLV ,MP4等主流视频格式为一个个小片段,...
FileSplitter分割合并 大文件分割成小文件
Boilsoft Video Splitter 是一款优秀且快速的专业无损视频分割软件,支持大于2GB以上的视频分割和直接拖放功能,无需重新编码就能帮助大家直接将完整的AVI、MPEG、RM、ASF、WMV、3GP、MKV、FLV 或 MP4等主流视频文件...
这个一个使用VC MFC实现的splitter例子,在运行状态下可以通过鼠标缩放调整控件大小。当鼠标放于控件之间的空隙时,鼠标变为可调整状态,此时可以自由拖动,来调整各控件的大小,类似于窗口分割的效果。
Boilsoft Video Splitter音频视频分割OK Boilsoft Video Splitter音频视频分割OK Boilsoft Video Splitter音频视频分割OK Boilsoft Video Splitter音频视频分割OK Boilsoft Video Splitter音频视频分割OK
Boilsoft Video Splitter 是分割速度最快的视频分割器,既可分割视频文件,也可分割音频文件。
Direct WAV MP3 Splitter 是一款分割处理MP3和wav音乐的工具,同时也是一款简单易用的mp3和wav文件分割工具,能快速分割较大的mp3和wav文件而无需再压缩,内建音频播放器可让你回放和预听效果。 功能说明: 1、...
好用的视频分割工具Allok Video Splitter
分割速度最快的媒体分割器,既可分割视频文件,也可分割音频文件。
mfc 文档窗口分成多个窗口示例 mfc splitter