2008-12-08 109 views
8

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

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

回答

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之后,两者都已经存在,所以它不是一个非常重要的区别。

+0

感谢您的回复。我从派生自CDialog的基类中派生类。所以我想这需要照顾的东西。 – Raghu 2008-12-09 05:27:11

0

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

1

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

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