MFC>将对话框连接到对话框类

时间:2008-12-08 06:39:16

标签: mfc dialog

我在已经存在的资源文件中定义了一个新对话框及其控件。我还创建了一个新文件,它将处理从该对话框生成的事件。但我不知道如何连接这两个。

声明enum { IDD=IDD_NEW_DIALOG };是否只需要连接两者?或者我们应该添加一些其他声明吗?

3 个答案:

答案 0 :(得分:14)

通常在MFC中完成的方法是在资源编辑器中定义一个对话框模板(就像你一样),然后在C ++中从CDialog派生一个类并将它与对话框模板相关联(它听起来像你已经完成 - 它并不完全清楚。)

实际上将两者联系起来的是CDialog代码的构造函数。如果查看MFC类向导自动生成的对话框相关代码,您将在构造函数实现中看到如下内容:

CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/) : CDialog(CMyDlg::IDD, pParent)

其中CMyDlg :: IDD被定义为具有新对话框模板标识符值的枚举。这就是让一切都发生,而不是枚举的声明。您可以将其修改为

CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/) : CDialog(IDD_NEW_DIALOG, pParent)

并且它仍然可以工作(假设IDD_NEW_DIALOG是资源中对话框的模板ID),因为所有发生的事情都是将对话框id传递给构造函数。

总的来说,总是值得记住的是,尽管初次出现,MFC并没有通过编译器魔法绑定到Windows - 这些都是用C ++和一些宏完成的。

编辑:DIALOGEX和DIALOG宣称Windows理解的对话资源格式略有差异:前者比后者更新。然而,至少从Windows 95开始,两者都存在,所以它不是一个非常重要的区别。

答案 1 :(得分:1)

当您通过对话框类(DoModal()Create创建非模态对话框)创建对话框时,这就是所需要的,这是正常的方法。

您当然需要从CDialog继承,并添加消息映射以将消息路由到您的ewvent处理函数。

答案 2 :(得分:0)

使用类向导为新创建的对话框创建一个类。 ctrl + w是UI资源视图中的快捷键。