CDialog和CDialogEx之间的区别

And*_*nko 5 mfc compare cdialog visual-c++

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

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

通过不使用表单向导提供的CDialogEx,我可能会遇到什么样的问题?

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

rri*_*wer 5

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


Roh*_*are 5

CDialogEX用于设置背景颜色,对话框上的背景图像。如果要设置背景图像或颜色,则您的类将从CDialogEX派生,但是请记住,如果使用CDialaogEX,则应使用该类的方法,例如CreateEX ,如果您尝试从CDilaogEX派生类并使用CDialog方法,则将出现错误。