2010-06-04 8 views
7

Tengo un controlador OnMove en mi clase de diálogo, que hace algunas cosas con objetos de control (es decir, un comando). Me parece que se llama a este controlador antes de que se llame al método de diálogo OnInitDialog y, por lo tanto, cuando intento llamar a los métodos en los controles secundarios, obtengo ASSERTS en la depuración ya que los controles aún no existen ... se crean en OnInitDialog .¿Cómo saber si se ha creado/inicializado un cuadro de diálogo de MFC?

Hay dos cosas que me gustaría ser capaz de verificar:

  1. ¿Cómo le digo el cuadro de diálogo se ha inicializado?
  2. ¿Cómo verifico que se ha creado una ventana de objeto de control CWnd individual?

En ambos casos, estoy buscando miembros de la clase o resultados de llamadas a métodos que se puedan utilizar.

Respuesta

7
  1. establecer un indicador en OnInitDialog

  2. el uso del m_hWnd su diálogo:

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

no quiero escribir código personalizado, por lo que parece preferible 2. ¿Hay algún otro miembro que pueda probar? –

+3

GetSafeHwnd() pero es solo un contenedor alrededor de :: IsWindow(). En términos de orientación a objetos, supongo que es mejor que consultar manualmente el controlador: me gusta el control de "bajo nivel" de la inspección del mango, personalmente. – Roel

+1

'GetSafeHwnd()' no es un contenedor alrededor de 'IsWindow()' - es un contenedor alrededor de 'm_hWnd' - no estándar C++ para comprobar si' this' es nulo, y devolver 'm_hWnd' o' null'. 'm_hWnd' puede ser no nulo sin ser una ventana (al igual que un identificador de archivo no puede ser nulo, pero el archivo se cierra) – Mordachai

Cuestiones relacionadas