Difference between CDialog and CDialogEx

2019-06-21 03:32发布

问题:

What is the difference between CDialog and CDialogEx? I decided to use CDialog because I can't assign m_pMainWnd to Dlg if Dlg is derived from CDialogEx.

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

What kind of problems I might fave by not using CDialogEx like form wizard was offering?

How to assign m_pMainWnd variable derived from CDialogEx?

回答1:

CDialogEX is derived from CDialog, so, setting m_pMainWnd to a CDialogEx derived object should not be a problem. CDialogEx provides the abillity to set the background color or image of the dialog.



回答2:

CDialogEX is used for setting background color, background images on dialog, If you want to set background images or color then your class will be derived from CDialogEX,but keep in mind If you are using CDialaogEX then you should use method of that class like CreateEX,If you are trying to derive class from CDilaogEX and use CDialog Method,then you will got Error..



回答3:

I had a case where a menu button was not working properly and the MFC source code recommended to replace CDialog by CDialogEx:

CMFCMenuButton does not close

And after I did it, everything worked right!