SplitterCtrl 控件详解

SplitterCtrl 控件是一种基于MFC的窗口分割工具,它允许开发者将程序的对话框、主窗口或子窗口分割成多个部分。每个部分都可以由 SplitterCtrl 管理。通过这种方式,可以创建一个由控件组成的矩阵。SplitterCtrl 类继承自 CWnd,并且与 CSplitterWnd 类似,但使用起来更为简单。例如,可以创建一个复杂的矩阵,并将 SplitterCtrl 放入其中,同时将其分割成多个部分。此外,还可以将矩阵绑定到父窗口的四个角之一,并且可以使用鼠标动态或静态地调整窗口之间的边界。

使用代码

SplitterCtrl 控件包含以下类:

  • SplitterCtrl:包含所有基础功能,但不负责绘制自身。
  • SplitterCtrl::IRecalc:此类允许分配控件各部分的大小。要使用它,需要从 SplitterCtrl::IRecalc 继承并实现其功能。同时,在类的构造函数中,需要调用 SplitterCtrl::SetRecalcManager 函数,并传入 SplitterCtrl::IRecalc 对象的指针。
  • SplitterCtrl::Draw:此类允许绘制控件。可以自定义窗口的绘制方式。要使用它,需要从 SplitterCtrl::Draw 继承并实现其功能。同时,在类的构造函数中,需要调用 SplitterCtrl::SetDrawManager 函数,并传入 SplitterCtrl::Draw 对象的指针。

要创建控件并添加元素,可以按照以下步骤进行:

#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 类的公开接口。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485