cómo (GetMessage(&msg, NULL, 0, 0)) recibe WM_QUIT
Después de WM_QUIT, GetMessage devolverá 0, saltará directamente desde while
Debes detectar WM_DESTROY o WM_CLOSE, según tus necesidades, debes detectar WM_DESTROY
Haga clic en la cruz pequeña La cadena de mensajes causada por la cruz es la siguiente:
Haga clic en la cruz y reciba un mensaje WM_CLOSE Generalmente, este mensaje no se procesa por sí solo, por lo que se envía a DefWindowProc. El procesamiento WM_CLOSE es enviar un mensaje WM_DESTROY y luego lo recibe. El procesamiento general en este momento es PostQuitMessage, que envía un mensaje WM_QUIT y GetMessage devuelve 0 después de recibir WM_QUIT, por lo que el while termina directamente y la siguiente lógica no se puede completar. .
Esta es la explicación del valor de retorno de GetMessage en MSDN:
Retorno
Valor
Si
la
función
recupera
un
mensaje
distinto
de
p>
WM_QUIT,
el
valor de retorno
es
distinto de cero.
p>
Si
la
función
recupera
el
WM_QUIT
mensaje,
el
valor de retorno
es
cero.
Si
hay
hay
un
error,
el
valor de retorno
es
-1.
Para
ejemplo,
la
función
falla
si
hWnd p>
es
un
identificador
de ventana
no válido
o
lpMsg
es
un
puntero no válido
.
A
obtener
información extendida
error
,
llamar
GetLastError.