2010-06-04 280 views
7

我在我的对话框类中有一个OnMove处理程序,它使用控件对象(即CButton)做一些事情。我发现这个处理程序在对话框OnInitDialog方法被调用之前被调用,因此当我尝试调用子控件的方法时,由于控件尚不存在,我在调试中获得了ASSERTS ...它们是在OnInitDialog中创建的。如何判断MFC对话框是否已创建/初始化?

有两件事情,我想能够检查:

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

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

回答

7
  1. OnInitDialog

  2. 设置一个标志使用你的对话框的m_hWnd

    if (::IsWindow(m_Ctrl.m_hWnd)) { 
        ... 
    } 
    
+0

我不想编写自定义代码,所以2听起来最好。还有其他成员我可以测试吗? – 2010-06-04 12:18:47

+3

GetSafeHwnd()但它只是一个包装:: IsWindow()。在面向对象方面,我认为它比手动查询句柄更好 - 我喜欢亲自检查句柄的'低级'控制。 – Roel 2010-06-05 09:09:12

+1

'GetSafeHwnd()'不是'IsWindow()'的包装 - 它是'm_hWnd'的包装 - 非标准C++来测试this是否为null,并返回m_hWnd或null。 'm_hWnd'可以是非空的,而不是一个窗口(就像文件句柄不能为空而是文件被关闭一样) – Mordachai 2017-04-11 14:34:27