2010-06-04 11 views
7

Ho un gestore OnMove nella mia classe di dialogo, che fa cose con oggetti di controllo (cioè un CButton). Sto trovando questo gestore viene chiamato prima che venga chiamato il metodo di dialogo OnInitDialog, e quindi quando provo a chiamare metodi sui controlli figlio, ottengo ASSERTS in debug come i controlli non esistono ancora ... sono creati in OnInitDialog .Come stabilire se una finestra di dialogo MFC è stata creata/inizializzata?

Ci sono due cose che mi piacerebbe essere in grado di controllare:

  1. Come faccio a dire il dialogo è stato inizializzato?
  2. Come posso controllare che sia stata creata una finestra di controllo dell'oggetto CWnd?

In entrambi i casi sto cercando i membri della classe oi risultati della chiamata al metodo che possono essere utilizzati.

risposta

7
  1. impostare un flag in OnInitDialog

  2. Usa del m_hWnd vostro dialogo:

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

Non voglio scrivere codice personalizzato, in modo da 2 suoni preferibile. Ci sono altri membri che potrei provare? –

+3

GetSafeHwnd() ma è solo un wrapper around :: IsWindow(). In termini di orientazione degli oggetti, suppongo sia più bello di interrogare manualmente l'handle: mi piace il controllo "di basso livello" di ispezionare l'handle, personalmente. – Roel

+1

'GetSafeHwnd()' non è un wrapper attorno a 'IsWindow()' - è un wrapper attorno a 'm_hWnd' - C++ non standard per verificare se' this' è nullo e restituire 'm_hWnd' o 'null'. 'm_hWnd' può essere not-null pur non essendo una finestra (proprio come un handle di file non può essere nullo ma il file deve essere chiuso) – Mordachai

Problemi correlati