【问题标题】:`CDialog::SetWindowPos` crashing`CDialog::SetWindowPos` 崩溃
【发布时间】:2011-03-22 11:22:10
【问题描述】:

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

【问题讨论】:

    标签: mfc


    【解决方案1】:

    MFC 就是这样有趣的。创建 C++ 对象不会创建相应的窗口;这是一个两步过程。您的第二个示例完全按照 Microsoft 的意图进行操作,创建 C++ 类,然后创建它应该控制的窗口。如果你试图在窗口存在之前调用窗口控制函数,就会发生不好的事情。

    【讨论】:

    • 但是,如果您还必须将这些参数传递给 Create,那么 explicit CDialog(UINT nIDTemplate, CWnd* pParentWnd = NULL); 构造函数的意义何在?
    • @Casebash,与不带任何参数的DoModal一起使用。
    猜你喜欢
    • 2013-02-11
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 2021-05-14
    • 1970-01-01
    • 2013-12-01
    相关资源
    最近更新 更多