ZSplitter: 为对话框控件添加自动分割






4.88/5 (13投票s)
2001年2月26日

639563

6475
一组类,提供在对话框中自动添加必需分割器的功能
引言
ZSplitterDlg
和 ZSplitter
类可以帮助您将拆分器添加到您的对话框、属性页或其他任何窗口。它会拆分您的控件,并使它们可移动和可调整大小。我认为这种方式比“自动调整大小”控件更好:它增加了“停靠”的机会。此外,还增加了一个控件,该控件添加了“自动调整大小”选项。最后,您可以将 ZSplitterDlg
与可调整大小的对话框集成(例如,Paolo Messina 的 CResizableDialog
)。
请注意,您不应向资源添加任何内容,也不应描述控件之间的关系。只需设置控件的相应大小和位置,然后使用以下函数
void addControls(int count, bool connectVertical, ...);
void addControl(int id);
演示项目展示了在 CDialog
、CPropertyPage
、CView
和 CFormView
类中使用这些自动添加的控件。
使用该类
最简单的方法是使用 ZSplitterDlgImpl
模板。 您应该修改
- 您的对话框或视图类的父类
- 构造函数实现
BEGIN_MESSAGE_MAP
宏中的第二个参数,以及- 窗口的 "
on init
" 函数
// in header
class CTestDlg1 : public ZSplitterDlgImpl<CPropertyPage>
// in source
CTestDlg1::CTestDlg1() : /*...*/ ZSplitterDlgImpl<CPropertyPage>(CTestDlg1::IDD) {}
BEGIN_MESSAGE_MAP(CTestDlg1, ZSplitterDlgImpl<CPropertyPage>)
// ...
END_MESSAGE_MAP()
BOOL CTestDlg1::OnInitDialog()
{
// ... and use addControl(s) function here
init();
// ...
}
ZSplitterDlgImpl
模板具有第二个参数(默认为 ZSplitter2
)。ZSplitter2
是拆分器控件的实现。 它有一个虚函数 OnPaint()
- 您可以更改其实现以获得控件的不同视图(请参阅演示项目中的 CMyView1
类)。
ZSplitterDlgImpl
模板可以帮助您实现拆分器控件,但您可以使用它的基类 ZSplitterDlg
(请参阅演示项目中的 CTestDlg2
类)。
我稍作修改了 CResizableDialog
,并获得了作者的许可,您可以将它与我的拆分器一起使用:使用 ZSplitterDlgResizable
类来完成这项工作(请参阅演示项目中的 CDemoDlg
类)。
这是资源编辑器中对话框的示例
用户可以在运行时以这种方式更改它。
您应该使用 addControls
或 addControl
函数来将一个控件添加到“拆分器集”或一组控件:它们将一起移动。这是您在上面看到的示例。
addControls(2,false,IDC_LIST6,IDC_LIST7);
addControls(2,true,IDC_LIST1,IDC_LIST8);
addControl(IDC_LIST9);
addControl(IDC_LIST2);
addControl(IDC_LIST3);
addControl(IDC_LIST4);
addControl(IDC_LIST5);
此外,您可以手动将 ZSplitter
类(最常见的拆分器控件)添加到页面。 有关详细信息,请查看图像和演示项目的 CTestDlg3
类。
待办事项列表
我想使拆分器的外观(颜色、大小、效果)更美观。 所以我想得到您的评论。 首先:这项技术对您有用吗?
注意
请务必查看我的网站,该网站更有可能提供更新和 Beta 版
http://www.zmike.net.
许可证
本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。
作者可能使用的许可证列表可以在此处找到。