如何判断是否已创建/初始化MFC对话框?

Mr.*_*Boy 8 c++ winapi mfc

我在对话框类中有一个OnMove处理程序,它使用控件对象(即CButton)执行一些操作.我发现在调用对话框OnInitDialog方法之前调用此处理程序,因此当我尝试在子控件上调用方法时,我在调试中获得ASSERTS,因为控件尚不存在...它们是在OnInitDialog中创建的.

我希望能够检查两件事:

  1. 如何判断对话框已初始化?
  2. 如何检查单个CWnd控件对象的窗口是否已创建?

在这两种情况下,我都在寻找可以使用的类成员或方法调用结果.

Roe*_*oel 7

  1. 设置一个标志 OnInitDialog

  2. 使用对话框m_hWnd:

    if ( ::IsWindow(m_Ctrl.m_hWnd) ) {
        ...
    }
    
    Run Code Online (Sandbox Code Playgroud)

  • GetSafeHwnd()但它只是:: IsWindow()的包装器.在面向对象方面,我认为它比手动查询手柄更好 - 我喜欢亲自检查手柄的'低级'控制. (3认同)
  • `GetSafeHwnd()` 不是 `IsWindow()` 的包装器 - 它是 `m_hWnd` 的包装器 - 非标准 C++,用于测试 `this` 是否为 null,并返回 `m_hWnd` 或 `null`。`m_hWnd` 在不是窗口时可以不为空(就像文件句柄可以不为空但文件会被关闭一样) (2认同)