TN029:拆分Windows
此说明描述了 MFC CSplitterWnd 类,提供 windows 拆分和管理调整其他窗格窗口。
拆分样式
CSplitterWnd 支持拆分窗口的两个不同的样式。
在 “静态拆分,,则在创建集合时,”拆分窗口创建窗格。窗格的顺序和数量从不更改。拆分栏用于调整不同的窗格。可以使用此样式显示在每个窗格的不同视图类。Visual C++ 图形编辑器和 windows 文件管理器是使用此拆分样式程序的示例。拆分窗口此样式不使用拆分框。
在 “动态拆分,那么,当用户拆分和非拆分新视图,”附加窗格创建和销毁。此拆分从单个视图开始并为用户提供拆分框中启动拆分。,当视图在一个方向上,拆分拆分窗口动态创建新的视图对象。此新视图对象表示新的窗格。使用键盘界面,如果该视图在两个方向拆分,拆分窗口创建三个新的窗格的三个新视图对象。当拆分处于活动状态时,窗口显示拆分框中为窗格之间的一个拆分栏。窗口销毁附加视图对象,当用户移除拆分时,但是,原始视图保持,直到销毁拆分窗口。Microsoft Excel 和 Microsoft Word 是使用动态拆分样式应用程序的示例。
在创建用于此类拆分窗口时,必须指定拆分器将管理的最大行数和列数。一个静态拆分器将创建窗格加载所有行和列。,当 CSplitterWnd ,将创建一个动态拆分器将只创建第一个窗格。
可以为静态拆分窗格指定的最大数是由 16 行 16 列。建议的配置为:
x 1 行 2 列:通常为不相似的窗格
x 2 行 1 列:通常为不相似的窗格
x 2 行 2 列:通常具有类似的窗格
可以为动态拆分窗格指定的最大数是由 2 行 2 列。建议的配置为:
x 1 行 2 列:为柱状数据
x 2 行 1 列:为文本或其他数据
x 2 行 2 列:对网格或表放入数据
拆分示例
许多 MFC 示例程序直接或间接使用拆分窗口。MFC 通用示例 VIEWEX 拆分器声明为静态拆分的若干使用,包括如何将拆分器。
也可以使用类向导创建新的多文档界面 (mdi) (MDI) 子帧包含一个拆分窗口的窗口类。有关拆分窗口的更多信息,请参见 多个文件类型、视图和框架窗口。
实现使用的术语
这是特定于拆分窗口的术语列表:
CSplitterWnd:
提供窗格拆分的控件和滚动条共享行上所有窗格或列之间的窗口。您指定行和列与从零开始的数字 (第一个窗格是行和列 = 0 = 0)。窗格:
CSplitterWnd 管理特定的窗口。窗格通常是从 CView 类派生的对象,但是,可能有相应的子窗口. ID 的所有 CWnd 对象使用 CWnd派生的对象,请通过对象的 RUNTIME_CLASS 到 CreateView 功能,则,如果使用 CView派生类。,因为框架使用动态创建在运行时,您的类必须使用 DECLARE_DYNCREATE 和 IMPLEMENT_DYNCREATE 。虽然具有特定于 CView 类在 CSplitterWnd 的大量代码,始终使用 CObject::IsKindOf ,这些运算之前。
拆分栏:
放置在窗格之间的行和列的控件。它可以用于调整行的窗格的大小或列。拆分框:
在使用创建新的 " 窗格中的行或列的动态 CSplitterWnd 的控件。它位于垂直滚动条顶部或在水平滚动条的左边。拆分交集:
一个垂直拆分栏和一个水平拆分栏的交集。您可以将同时调整窗格的行和列的大小。
共享滚动条
CSplitterWnd 类还支持共享滚动条。这些滚动条控件是 CSplitterWnd 的子级并在拆分的不同窗格中共享。
例如,那么,当创建 CSplitterWnd时,在 x 1 行 2 列窗口,可以指定 WS_VSCROLL。窗口创建共享在两个窗格之间的特定滚动条控件。
[ ][ ][^]
[pane00][pane01][|]
[ ][ ][v]
当用户移动滚动条, WM_VSCROLL 信息将发送到两个视图。当其中一个视图将滚动条的位置,共享滚动条将设置为。
请注意共享滚动条是最有用的方法与和中的视图对象。如果混视图不同输入拆分,则可能必须协调它们的滚动位置编写特定代码。任何 CView- 使用 CWnd 滚动条 API 的派生类将委托给共享滚动条,如果存在)。CScrollView 实现是支持共享滚动条 CView 类的一个示例。从 CView,对类进行派生取决于非控件滚动条的类,或例如使用标准的 windows 实现的类 (, CEditView) 不会使用 CSplitterWnd使用共享滚动条功能。
最小大小
对于每行具有最小的行高,并且,对于每一列具有最低的列宽。此最小确保窗格不太小而无法显示在完整详细信息。
对于静态拆分窗口,初始最小行高度和列的宽度为 0。对于动态拆分窗口,初始最小行高度和列宽。 CSplitterWnd::Create 功能的 sizeMin 参数设置为。
使用 CSplitterWnd::SetRowInfo 和 CSplitterWnd::SetColumnInfo 功能,可以更改这些最小大小。
实际使用。理想的大小
窗格的格式在拆分窗口的取决于包含这些帧的大小。当用户调整包含的帧时, CSplitterWnd 重新定位和调整窗格,以便尽可能符合。
用户可以手动设置行高和列宽范围,使用 CSplitterWnd 类,或者程序可以设置理想的大小。实际大小大于理想可以小或。窗口将调整实际大小,如果没有足够的空间显示理想的大小或,如果在右侧拆分窗口的或底部的多个空格。
自定义控件
您可以重写许多功能提供自定义的行为和自定义的接口。您可以重写首先此设置为拆分窗口的各种图形元素提供备用 imagery。
virtual void OnDrawSpltter(CDC* pDC, ESplitType nType, const CRect& rect);
virtual void OnInvertTracker(const CRect& rect);
您调用此函数创建一个共享滚动条控件。可以重写该滚动条来创建额外的控件。
- virtual BOOL CreateScrollBarCtrl(DWORD dwStyle, UINT nID);
这些函数实现动态拆分窗口的逻辑。您可以重写这些提供更高级的拆分逻辑。
virtual void DeleteView(int row, int col);
virtual BOOL SplitRow(int cyBefore);
virtual BOOL SplitColumn(int cxBefore);
virtual void DeleteRow(int rowDelete);
virtual void DeleteColumn(int colDelete);
CView 功能
CView 类使用以下高级命令委托到 CSplitterWnd 实现。由于这些命令是虚拟的,标准 CView 实现不需要整个 CSplitterWnd 实现链接。对于使用非 CView ,但 CSplitterWnd的应用程序, CSplitterWnd 实现与应用程序不会链接。
virtual BOOL CanActivateNext(BOOL bPrev = FALSE);
检查 ID_NEXT_PANE 或 ID_PREV_PANE 当前是否可能的。virtual void ActivateNext(BOOL bPrev = FALSE);
执行 “下一个窗格”或 “个窗格”命令。virtual BOOL DoKeyboardSplit();
执行键盘部件的命令,通常为 “拆分的窗口”。