2010-06-04 61 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

相關問題