Acerca de WM_CLOSE y WM_DESTROY

WM_CLOSE y WM_DESTROY

WM_DESTROY se usa para cerrar el programa

WM_CLOSE se usa para cerrar la ventana

WM_CLOSE y WM_DESTROY son lo mismo que cancelar la ventana. Su orden de ejecución es WM_CLOSE, WM_DESTROY

Sin embargo, debe tenerse en cuenta que la función predeterminada del botón de cancelación OnCancel() de la ventana MFC no activa el mensaje WM_CLOSE, solo activa WM_DESTROY.

WM_CLOSE:

WM_CLOSE:

WM_CLOSE cierra la ventana seleccionando "Cerrar" en el menú del sistema o "Cerrar" en el menú del sistema. Su proceso de ventana recibirá WM_CLOSE después de seleccionar Cerrar en el menú del sistema o hacer clic en el botón "X" en la esquina superior derecha de la ventana. DefWindowProc maneja WM_CLOSE llamando a DestroyWindow. Por supuesto, tampoco puede dejar que DefWindowProc lo maneje, sino hacerlo usted mismo, como preguntarle al usuario si desea guardar los cambios.

WM_DESTROY:

DestroyWindow completa la limpieza de la ventana y finalmente envía WM_DESTROY:

DestroyWindow al administrador de la ventana, tal como el proceso de ventana envía WM_DESTROY. Es decir, si no se maneja el mensaje, el proceso no finalizará incluso si se destruye la ventana. Generalmente, WM_DESTROY se maneja liberando recursos (como memoria solicitada, etc.) y luego llamando a PostQuitMessage: WM_QUIT: cerrar el bucle de mensajes

PostQuitMessage envía WM_QUIT a la cola de mensajes. Tenga en cuenta que WM_QUIT nunca llega al proceso de ventana porque GetMessage devuelve FALSE cuando recibe WM_QUIT, finalizando así el bucle de mensajes y finalmente el proceso finaliza y el programa sale.

Suponiendo que el usuario ejecuta HELLOWIN.exe y eventualmente hace clic en el botón Cerrar, o suponiendo que el usuario selecciona Cerrar en el menú del sistema usando el teclado o el mouse, DefWindowProc manejará la entrada del teclado o el mouse y detectará lo que ocurre después del usuario. selecciona la opción cerrar, envía un mensaje a la ventana del procedimiento WM_SYSCOMM. DefWindowProc envía un mensaje WM_CLOSE al procedimiento de ventana y WndProc vuelve a pasar el mensaje a DefWindowProc. En respuesta, DestroyWindow llama a DestroyWindow. DestroyWindow hace que Windows envíe un mensaje WM_DESTROY al procedimiento de ventana y WndProc responde a este mensaje llamando a PostQuitMessage y colocando un mensaje WM_QUIT en la cola de mensajes. Este mensaje hace que finalice el bucle de mensajes en WinMain y que finalice el programa.