【问题标题】:How to tell if a MFC Dialog has been created/initialized?如何判断 MFC 对话框是否已创建/初始化?
【发布时间】:2011-02-27 17:51:30
【问题描述】:

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

我希望能够检查两件事:

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

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

【问题讨论】:

    标签: c++ mfc winapi


    【解决方案1】:
    1. OnInitDialog中设置标志

    2. 使用您的对话框的m_hWnd

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

    【讨论】:

    • 我不想编写自定义代码,所以 2 听起来更可取。还有其他我可以测试的成员吗?
    • GetSafeHwnd() 但它只是 ::IsWindow() 的包装。就面向对象而言,我想这比手动查询句柄要好——我个人喜欢检查句柄的“低级”控制。
    • GetSafeHwnd() 不是 IsWindow() 的包装器 - 它是 m_hWnd 的包装器 - 非标准 C++ 来测试 this 是否为空,并返回 m_hWnd 或 @ 987654329@。 m_hWnd 不是窗口时可以不为空(就像文件句柄可以不为空但文件被关闭一样)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 2022-10-12
    相关资源
    最近更新 更多