使用对话框模板创建属性表

时间:2015-05-05 03:30:03

标签: c++ mfc

我需要使用UI扩展现有的MFC应用程序,除非我使用制表符控件,否则最终会非常混乱。但是,UI的本质是有一些控件是全局的,只有一些可以本地化到特定的选项卡。

标签控件(CPropertyPage)的标准用法或多或少要求CPropertySheet对象上只显示CPropertySheet个实例(标签),而不是其他任何内容。有一个Microsoft Example Project显示在选项卡控件所占据的区域外绘制的单个附加窗口...但它不能立即清楚如何创建/绘制/处理它,它只有一个生成一些事件的附加窗口(我猜它是绘制的,所以必须有一个潜伏在某处的WM_PAINT事件处理程序。)

是否可以使用MS对话框编辑器布置一组控件,包括选项卡控件,并使用该模板创建let,以一种很好的方式连接事件处理程序等...或者在这样的情况下,让MFC框架尽可能多地进行创建,绘图和事件处理的一些等效方法?

2 个答案:

答案 0 :(得分:1)

是的,可以创建对话框模板并在CPropertyPage中使用它们。

每个CPropertyPage的行为几乎都像一个对话框,并处理其上控件的所有事件。

还有像OnApply这样的功能可以帮助您管理控件和内部存储之间的数据交换。

中央CPropertySheet仅创建激活的对话框。因此,当页面处于活动状态时,第一次调用页面的OnInintDialog。

自2010年以来,MFC比CPropertySheet更具可能性。您可以创建选项卡式视图,这也可能是CFormViews。我不喜欢基于CDialog的应用程序,所以我更喜欢带有工具栏和菜单的标准框架中的标签视图(如果适用于应用程序)。因此,另一种整理UI的方法是选择带有选项卡式文档的MDI界面......但是多个文档可能并不是您想要的。

具有多个选项卡式视图的SDI应用程序的

Here is a sample。 此外,Coeproject会显示更多样本here以及分割符和标签here

答案 1 :(得分:0)

至少有三种解决方案路径:

  • 尝试将情境压缩到CPropertySheet + CPropertyPage框架中,这自然不允许对CPropertySheet对象进行额外的对话框控制,因此您将不会获得此框架支持< / LI>
  • 在普通对话框上放置一个标签控件,然后使用TCN_SELCHANGE消息来触发手动隐藏的代码。显示受制表符控件限制的单个对话框控件(同样没有框架支持,但这次&#34;在&#34;选项卡控件中而不是在它之外)
  • 按照Mark Ransom的观察,如果您可以在CWnd上嵌入一种基于CPropertySheet的控件,那么您可以嵌入任何此类对象,包括CDialog已在MFC对话框编辑器中开发的基于对象的对象

所有这些方法都将面临挑战,并且将取决于哪种情况更好的具体情况。但首先你应该考虑是否有一个更清洁的UI设计,这将有助于一个更简单的解决方案。

在我的具体案例中,我没有看到更清洁的设计方案,并且发现采用第二种方法最简单。它给我留下了一些相当简单的调用ShowWindow()来显示/隐藏选项卡控件中的控件。