【问题标题】:MFC> Connecting a dialog to a dialog classMFC> 将对话框连接到对话框类
【发布时间】:2010-09-25 19:35:24
【问题描述】:

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

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

【问题讨论】:

    标签: mfc dialog


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复。我从派生自 CDialog 的基类派生该类。所以我想这可以解决问题。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-09
        • 1970-01-01
        • 1970-01-01
        • 2012-01-05
        • 1970-01-01
        • 1970-01-01
        • 2011-07-25
        • 1970-01-01
        相关资源
        最近更新 更多