65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.88/5 (13投票s)

2001年2月26日

viewsIcon

639563

downloadIcon

6475

一组类,提供在对话框中自动添加必需分割器的功能

引言

ZSplitterDlgZSplitter 类可以帮助您将拆分器添加到您的对话框、属性页或其他任何窗口。它会拆分您的控件,并使它们可移动和可调整大小。我认为这种方式比“自动调整大小”控件更好:它增加了“停靠”的机会。此外,还增加了一个控件,该控件添加了“自动调整大小”选项。最后,您可以将 ZSplitterDlg 与可调整大小的对话框集成(例如,Paolo Messina 的 CResizableDialog)。

请注意,您不应向资源添加任何内容,也不应描述控件之间的关系。只需设置控件的相应大小和位置,然后使用以下函数

void addControls(int count, bool connectVertical, ...);
void addControl(int id);

演示项目展示了在 CDialogCPropertyPageCViewCFormView 类中使用这些自动添加的控件。

Sample Image

使用该类

最简单的方法是使用 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 类)。

resizable sample

这是资源编辑器中对话框的示例

in vc++ editor

用户可以在运行时以这种方式更改它。

after user manipulations

您应该使用 addControlsaddControl 函数来将一个控件添加到“拆分器集”或一组控件:它们将一起移动。这是您在上面看到的示例。

  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 类。

before moving

after moving

待办事项列表

我想使拆分器的外观(颜色、大小、效果)更美观。 所以我想得到您的评论。 首先:这项技术对您有用吗?

注意

请务必查看我的网站,该网站更有可能提供更新和 Beta 版
http://www.zmike.net.

许可证

本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。

作者可能使用的许可证列表可以在此处找到。

© . All rights reserved.