C ++ MFC:将常用控件分成一组

Posted

技术标签:

【中文标题】C ++ MFC:将常用控件分成一组【英文标题】:C++ MFC : Separating common controls into a group 【发布时间】:2014-08-07 15:19:11 【问题描述】:

背景

我对 MFC 和 C++ 缺乏经验。

我有一组对话框,它们都有一小部分,包含相同的控件集和极其相似的代码。

我想从所有对话框中分离出一小部分控件,将代码从所有对话框类中移到一个类中。

问题

我不知道该怎么做。我所有的想法似乎都有自己的问题,因为我太缺乏经验了。

我可以创建一个超类,这些对话框继承自它动态地创建控件,给定一个 (x, y) 并连接所有连接并通过虚拟方法传达少数细节? 问题是我不知道具体情况:

    超类从哪里继承? (CWnd?CDialog?)

    我应该在哪里创建超类中的控件? (OnInit?构造函数?)

    在哪里初始化超类的子类? (OnInit?构造函数?)

    我只有两个消息映射吗?一个给超类,一个给子类?

还有什么我应该注意的陷阱吗?

【问题讨论】:

您在每个对话框中的常用控件是否具有不同的功能,具体取决于它们出现的对话框还是都执行相同的操作? 他们每个人都做同样的事情。唯一的区别是它们影响的变量。例如,维度会为每个不同的对话框读取不同的变量。 【参考方案1】:

您要重用的小部分可以是一个普通的无模式对话框,从 CDialog 派生。您可以使用资源编辑器创建其控件 - 就像任何其他对话框一样 - 因此它们不必动态创建。诀窍是关闭对话框的标题栏样式(在资源编辑器中),因此这部分是一个单独的对话框在视觉上不会很明显。它将与父对话框完全融合。

对于您想要重用此对话框的每个位置,只需创建它并使用 SetWindowPos 将其放置在具有 (x, y) 坐标的父对话框上。

【讨论】:

不要将 WS_CHILD 样式添加到资源中。

以上是关于C ++ MFC:将常用控件分成一组的主要内容,如果未能解决你的问题,请参考以下文章

VS2010/MFC编程入门之二十(常用控件:静态文本框)

MFC常用控件类

VS2010-MFC(常用控件:图片控件Picture Control)

转VS2010/MFC编程入门之二十五(常用控件:组合框控件Combo Box)

VS2010-MFC(常用控件:滚动条控件Scroll Bar)

MFC编程入门之二十六(常用控件:滚动条控件ScrollBar)