2012-05-05 12 views
5

¿Por qué debería invocarse el constructor de mi CWinApp derivado antes de que comience la función principal?
Por qué no puede ser algo como:En MFC, ¿por qué necesito crear una instancia global de CWinApp?

int WinMain() 
{ 
    CMainFrame* pMainFrame = new CMainFrame; 
    // etc ... 
} 

Busco la razón técnica que obliga a este comportamiento.
Editar:
Para aclarar - Si estoy usando win32 API sin MFC, la ventana principal se crea dentro de WinMain, entonces, ¿cuál es la diferencia?

+0

Probablemente para que el constructor de 'CWinApp' se ejecute * antes * de que se ejecute la función' main'. Pero no estoy realmente seguro; Nunca he intentado hacer esto para ver si funciona. ¿Tienes? –

+0

@CodyGray Sí, lo intenté. La aplicación falla dentro de AfxWinMain –

+0

Ah sí, exactamente como predice la respuesta de Frederic. El constructor de 'CWinApp' establece el valor de algunas variables de estado, esperadas por' AfxWinMain'. –

Respuesta

3

Básicamente, eso se debe a que los diseñadores de MFC decidieron proporcionar el punto de entrada de la aplicación (WinMain(), no main()) en la biblioteca, para que los usuarios no tengan que escribir uno.

de inicialización y la lógica de terminación se vuelven a colocar en las InitInstance() y ExitInstance() métodos de la instancia de un CWinApp singleton derivada de proporcionada por el usuario La aplicación. Esta instancia debe existir antes de que WinMain() se ejecute, ya que llama a los métodos antes mencionados (y Run() para ingresar al bucle de mensajes) y lo usa para almacenar el estado (como el argumento nCmdShow que recibe).

La definición de la instancia CWinApp -derivada en el alcance global es una manera fácil de garantizar que existe para cuando se ejecuta WinMain().

This article tiene detalles adicionales sobre lo que ocurre debajo del cofre cuando se inicia una aplicación MFC.

Cuestiones relacionadas