【发布时间】:2011-03-22 11:22:10
【问题描述】:
如果我在如下构造的对话框中调用CDialog::SetWindow:CDialog *tmp=new CDialog(IDD_TEST, theParent);,那么它会崩溃。如果我打电话给CDialog *tmp=new CDialog(); tmp->Create(IDD_TEST, theParent);,那就不会了。怎么会?
【问题讨论】:
标签: mfc
如果我在如下构造的对话框中调用CDialog::SetWindow:CDialog *tmp=new CDialog(IDD_TEST, theParent);,那么它会崩溃。如果我打电话给CDialog *tmp=new CDialog(); tmp->Create(IDD_TEST, theParent);,那就不会了。怎么会?
【问题讨论】:
标签: mfc
MFC 就是这样有趣的。创建 C++ 对象不会创建相应的窗口;这是一个两步过程。您的第二个示例完全按照 Microsoft 的意图进行操作,创建 C++ 类,然后创建它应该控制的窗口。如果你试图在窗口存在之前调用窗口控制函数,就会发生不好的事情。
【讨论】:
explicit CDialog(UINT nIDTemplate, CWnd* pParentWnd = NULL); 构造函数的意义何在?
DoModal一起使用。