SplitterCtrl 控件是一种基于MFC的窗口分割工具,它允许开发者将程序的对话框、主窗口或子窗口分割成多个部分。每个部分都可以由 SplitterCtrl 管理。通过这种方式,可以创建一个由控件组成的矩阵。SplitterCtrl 类继承自 CWnd,并且与 CSplitterWnd 类似,但使用起来更为简单。例如,可以创建一个复杂的矩阵,并将 SplitterCtrl 放入其中,同时将其分割成多个部分。此外,还可以将矩阵绑定到父窗口的四个角之一,并且可以使用鼠标动态或静态地调整窗口之间的边界。
SplitterCtrl 控件包含以下类:
要创建控件并添加元素,可以按照以下步骤进行:
#include "SplitterCtrl.h"
SplitterCtrlEx m_Splitter;
CListCtrl m_List1, m_List2;
…
…
if (!m_Splitter.Create(this, WS_CHILD | WS_VISIBLE, CRect(0, 0, 200, 200), ID_SplitterCtrl))
return -1; // error.
// Create child controls.
if (!m_List1.Create(WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | LVS_REPORT, CRect(0, 0, 0, 0), &m_Splitter, ID_List1) ||
!m_List2.Create(WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | LVS_REPORT, CRect(0, 0, 0, 0), &m_Splitter, ID_List2))
return -1; // error.
m_List1.InsertColumn(0, "Column 0", LVCFMT_LEFT, 100);
m_List2.InsertColumn(0, "Column 1", LVCFMT_LEFT, 100);
// Add child items in the m_Splitter.
m_Splitter.AddRow();
m_Splitter.AddColumn();
m_Splitter.AddColumn();
m_Splitter.SetWindow(0, 0, m_List1.m_hWnd);
m_Splitter.SetWindow(0, 1, m_List2.m_hWnd);
// Load state from registry.
if (!m_Splitter.LoadState(AfxGetApp(), "SplitterCtrl", "SplitterState")) {
m_Splitter.Update();
m_Splitter.SetColumnsEqualWidth();
// error -> create default state.
}
m_Splitter.Update();
可以像管理普通矩阵一样管理这个控件,动态地插入和删除行和列(AddRow/ AddColumn, InsertRow/ InsertColumn, DeleteRow/ DeleteColumn)。控件允许分配大小(SetColumnWidthForStatic/ SetRowHeightForStatic, SetColumnWidthForDynamic/ SetRowHeightForDynamic),还可以使单元格的宽度和高度相等(SetColumnsEqualWidth/ SetRowsEqualHeight)。控件预计会调用 Update 函数来显示由函数 InsertRow, DeleteColumn, SetRowHeightForStatic, SetColumnWidthsForDynamic 等设置的结果。此外,还可以从注册表或其他来源保存和加载控件的状态(LoadState/ SaveState)。要了解所有可能性,请查看 SplitterCtrl 类的公开接口。