8

我在现有资源文件中定义了一个新对话框及其控件。我还创建了一个新文件,它将处理从此对话框生成的事件。但我不确定如何将这两者联系起来。

声明是否enum { IDD=IDD_NEW_DIALOG };是连接两者所需的全部内容?还是我们应该添加一些其他声明?

4

3 回答 3

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 开始,两者就已经存在,所以这并不是一个非常重要的区别。

于 2008-12-08T10:29:17.687 回答
1

这就是您通过对话框类(或非模态对话框)创建对话框时所需的全部内容DoModal()Create这是正常的方法。

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

于 2008-12-08T06:43:15.663 回答
0

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

于 2008-12-08T06:43:12.653 回答