mfc拆分窗口,mfc新建窗体
MFC拆分窗体(拆分窗口)
参考MSDN微软基础类库和模板TNO 029
描述MFC中的CSplitterWnd类,该类用于支持窗体的分割并管理分割后每个窗格的大小。
1拆分样式(拆分器样式)
CSplitterWnd类支持两种不同风格的拆分窗口。
1.1静态分离器(静态分离器)
拆分窗口的窗格在拆分窗口中;)是创建的时候就创建了,顺序和数量不会变。拆分条用于控制每个窗格的大小。通常,不同的窗格是不同的视图类;
比如Visual C图形和Windows文件管理器就是这种风格的拆分形式;
这种样式的拆分窗体不使用拆分框。
1.2动态拆分器(dynamic splitter)
当用户控制视图的分割或停止分割时,将创建或销毁附加的窗格;这种动态分割从单个视图开始,分割框用于初始化分割。当一个视图可以分成两个方向时,将创建3个新视图,并显示为3个新窗格;当拆分被激活时,拆分框将像拆分条一样被绘制在窗格中。当用户移除拆分时,附加窗格将被销毁,只有原始视图(拆分时位于第0行和第0列的窗格)将被保留,直到拆分表单本身被销毁;
比如微软Excel和微软Word就是这种风格的拆分形式;
创建任何样式的拆分表单时,必须给出拆分表单的最大行数和列数;
静态拆分窗体,每个窗格都必须创建CSplitterWnd:create view;查看;
创建CSplitterWnd对象时,将自动创建动态拆分表单的第一个窗格。
静态拆分表单的最大行数和列数是16 x 16。
动态拆分表单的最大行数和列数是2 x 2。
推荐的分段方法是:
1 X 2 2 X 1 2 X 2
2拆分表单示例(拆分器示例)
MFC的很多列子程序都是直接或间接用来拆分窗体的,Scripple程序的第四部分,一个介绍性的MFC程序,就使用了动态拆分窗体。
ViewEx在MFC标准示例中展示了静态使用拆分窗体的方法,包括如何将一个拆分窗体包含在另一个中。
3实施中使用的术语以拆分形式使用
CsplitterWnd(拆分形式):
提供分隔窗格和滚动条的空间(垂直滚动条由行共享,水平滚动条由列共享);同时,行和列的下标从0,0开始,即第一个窗格是第0行第0列的窗格。
窗格(窗格)
由CSplitterWnd管理的应用程序显示数据表单。一般来说,窗格是视图的派生类对象,但实际上,窗格可以是CWnd派生的任何对象;
拆分条(拆分条)
窗格的行和列之间的控件,用于控制行和列上窗格的大小。
分流箱(分流箱)
动态拆分窗体位于垂直滚动条顶部或水平滚动条最左侧的键用于创建一个新的拆分窗格。
分割器交叉点(分割器交叉点)
或垂直和水平拆分控制条的交叉点,可用于同步控制水平和垂直窗格的大小。
4个共享滚动条(共享滚动条)
CSplitterWnd支持共享滚动条,滚动条是CSplitterWnd的子窗体,以拆分的形式被不同的窗格共享;
如果在创建1x2cplitterwnd时声明了WS_VSCROLL split,则由两个窗格共享的垂直滚动条将创建如下:
[ ][ ][^]
[窗格00][窗格01][]
[ ][ ][v]
移动滚动条时,WM_VSCROLL消息将被发送到两个窗格。类似地,同一列中的窗格可以共享水平滚动条。
注意
在分割窗体中共享滚动条是非常有用的。如果两个不同的视图使用共享滚动条,则有必要协调视图的滚动位置和显示。所有视图派生类都可以通过在CWnd中操作ScrollBar方法来控制共享滚动条,但一些非视图派生类、不使用ScrollBar控件的类或实现标准窗口的类(如CEditView)将不适合共享滚动条。
最小尺寸(最小尺寸)
在拆分表单中,每行都有最小高度限制,每列都有最小宽度限制。这两个最小值用于控制窗格中显示的最小数据大小。
静态拆分窗体的最小大小为0,0;创建CSplitterWnd:时,可以设置动态拆分窗体的最小大小;
这些值可以用SetColumnInfo和SetRowInfo更改;
6未发布的接口函数(受保护的接口)
下面将讨论CSplitterWnd的一些未公开的技术细节,供高级用户定制CSplitterWnd;
这些API尚未正式发布,可能会在MFC的未来版本中进行更改:
6.1分割箱和分割位置跟踪器的分割控制条(分割条)图
enum ESplitType { splitBox,splitBar,splitIntersection,splitBorder }。虚拟void OnDrawSplitter(CDC* pDC,ESplitType nType,const CRect rect);虚拟void on inverttracker(const CRect rect);这些虚拟功能可用于实现具有不同图形表示的分割形式。
6.2创建视图和控件
virtual BOOL CreateScrollBarCtrl(DWORD dw style,UINT nID);默认行为是创建一个滚动条,但它可以被重载以在滚动条旁边创建一个新的控件。
6.3表格的动态分段
虚拟void DeleteView(int row,int col);虚拟BOOL SplitRow(int cyBefore);虚拟BOOL split column(int CX before);虚拟void DeleteRow(int row);虚拟void delete column(int row);用于动态拆分表单的逻辑(当拆分表单的样式为SPLS _动态_拆分时)