【问题标题】:Difference between CDialog and CDialogExCDialog 和 CDialogEx 的区别
【发布时间】:2014-05-15 09:06:57
【问题描述】:

CDialog 和 CDialogEx 有什么区别?我决定使用 CDialog,因为如果 Dlg 派生自 CDialogEx,我无法将 m_pMainWnd 分配给 Dlg。

BOOL CPreparationApp::InitInstance()
{
    MyClass2 Dlg; //derived from CDialog 
    m_pMainWnd = &Dlg;
    Dlg.DoModal();
    return TRUE;
}

不使用表单向导提供的 CDialogEx 可能会解决哪些问题?

如何分配从 CDialogEx 派生的 m_pMainWnd 变量?

【问题讨论】:

  • m_pMainWnd是什么类型的?

标签: visual-c++ mfc compare cdialog


【解决方案1】:

CDialogEX 是从 CDialog 派生的,因此,将 m_pMainWnd 设置为 CDialogEx 派生对象应该不是问题。 CDialogEx 提供了设置对话框的背景颜色或图像的能力。

【讨论】:

    【解决方案2】:

    CDialogEX 用于设置背景颜色,对话框上的背景图像,如果你想设置背景图像或颜色,那么你的类将派生自 CDialogEX,但请记住,如果你使用的是 CDialaogEX,那么你应该使用那个方法像 CreateEX 这样的类,如果你试图从 CDilaogEX 派生类并使用 CDialog 方法,那么你会得到错误..

    【讨论】:

      【解决方案3】:

      我遇到了一个菜单按钮无法正常工作的情况,MFC 源代码建议将CDialog 替换为CDialogEx

      CMFCMenuButton does not close

      在我这样做之后,一切正常!

      【讨论】:

        【解决方案4】:

        CDialogEx 创建一个背景菜单、按钮或者他们称之为对话框 如果您在按下按钮时对按钮进行编程以提示窗口框架。要与窗口框架交互,您需要使用 CDialog。

        这是因为 CDialog 直接继承自 CWnd。

        【讨论】:

          猜你喜欢
          • 2012-03-13
          • 1970-01-01
          • 2013-08-07
          • 2011-10-20
          • 2020-01-23
          • 1970-01-01
          • 2013-12-01
          • 2014-10-09
          • 2010-12-21
          相关资源
          最近更新 更多