2011-03-22 83 views
1

如果我在调用CDialog::SetWindow的对话框构造如下:CDialog *tmp=new CDialog(IDD_TEST, theParent);,那么它崩溃。如果我打电话,CDialog *tmp=new CDialog(); tmp->Create(IDD_TEST, theParent);,那么它不会。怎么来的?`CDialog :: SetWindowPos`崩溃

回答

3

MFC是一种有趣的方式。创建一个C++对象不会创建相应的窗口;这是一个两步过程。你的第二个例子完全按照微软的意图创建C++类,然后创建它应该控制的窗口。如果在窗口存在之前尝试调用窗口控制函数,则会发生不好的事情。

+0

但是,显式CDialog(UINT nIDTemplate,CWnd * pParentWnd = NULL)的意义是什么;如果必须将这些参数传递给Create,构造函数是什么? – Casebash 2011-04-12 06:20:19

+0

@Casebash,那些与'DoModal'一起使用,没有任何参数。 – 2011-04-12 13:04:50