我在已经存在的资源文件中定义了一个新对话框及其控件。我还创建了一个新文件,它将处理从该对话框生成的事件。但我不知道如何连接这两个。
声明enum { IDD=IDD_NEW_DIALOG };
是否只需要连接两者?或者我们应该添加一些其他声明吗?
答案 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资源视图中的快捷键。