我在已经存在的资源文件中定义了一个新对话框及其控件.我还创建了一个新文件,它将处理从该对话框生成的事件.但我不知道如何连接这两个.
声明enum { IDD=IDD_NEW_DIALOG };是否只需要连接两者?或者我们应该添加一些其他声明?
Dav*_*idK 14
这通常在MFC中完成的方法是在资源编辑器中定义一个对话框模板(就像你已经完成的那样),然后在C++中从CDialog派生一个类并将它与对话框模板相关联(听起来你已经完成了) - 它并不完全清楚).
实际上将两者联系起来的是CDialog代码的构造函数.如果查看MFC类向导自动生成的对话框相关代码,您将在构造函数实现中看到如下内容:
CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/) : CDialog(CMyDlg::IDD, pParent)
Run Code Online (Sandbox Code Playgroud)
其中CMyDlg :: IDD被定义为具有新对话框模板标识符值的枚举.这就是让一切都发生,而不是枚举的声明.你可以修改它
CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/) : CDialog(IDD_NEW_DIALOG, pParent)
Run Code Online (Sandbox Code Playgroud)
并且它仍然有效(假设IDD_NEW_DIALOG是资源中对话框的模板ID),因为所发生的一切都是对话框ID被传递到构造函数中.
一般来说,总是值得记住的是,尽管初次出现,MFC并没有通过编译器魔法绑定到Windows - 它都是用C++和一些宏完成的.
编辑:DIALOGEX和DIALOG声明Windows理解的略有差异的对话框资源格式:前者比后者更新.但是至少从Windows 95开始,两者都存在,所以它并不是一个非常重要的区别.