[C con Clase] Parámetros de WM QUIT y PostQuitMessage() en WinAPI

Salvador Pozo salvador en conclase.net
Mie Jul 16 21:40:16 CEST 2008


El pasado 2008-07-16 18:41:37, David Reza escribió:

DR> Si nExitCode es el parámetro de PostQuitMessage():
DR> VOID PostQuitMessage( int nExitCode // código se salida);
DR> Por qué se hace ésto? :
DR>  WM_QUIT nExitCode = (int) wParam; // código de salida
DR> El valor de wParam es el del parámetro del procedimiento de ventana, el cual
DR> contiene información sobre el mensaje, cierto?

Hola:

Generalmente, este mensaje no se procesa por el procedimiento de ventana. Es aconsejable terminar el programa de forma incondicional cuando se recibe este mensaje.

Vuelvo a centrar la atención en el bucle de mensajes:

----8<------
   /* Bucle de mensajes: */
   while(TRUE == GetMessage(&mensaje, 0, 0, 0))
   {
      TranslateMessage(&mensaje);
      DispatchMessage(&mensaje);
   }

   return mensaje.wParam;
----8<------

La función GetMessage puede devolver los siguientes valores:

Si la función recibe un mensaje distinto de WM_QUIT, el valor de retorno es TRUE. Si recibe WM_QUIT, retornará con FALSE. Si hubo un error, retornará con -1. Por ejemplo la función falla si se llama con un manipulador de ventana no válido.

El bucle de mensajes está diseñado para que termine si se recibe el mensaje WM_QUIT.

El valor de retorno de WinMain es "mensaje.wParam", que es el valor de nExitCode.

Pero si, efectivamente, el mensaje llega al procedimiento de ventana, sí habría que manipular el parámetro para obtener el valor de nExitCode.

Por último, insisto de nuevo en que la sintaxis que usamos para explicar los mensajes sólo se debe usar para conocer el significado de cada parámetro.

DR>  WM_QUIT nExitCode = (int) wParam; // código de salida

Esto indica que el mensaje WM_QUIT viene acompañado de un parámetro que indica el código de salida del programa, y que ese parámetro se codifica en el interior del parámetro wParam.

Hasta pronto.


-- 
Salvador Pozo (Administrador)
mailto:salvador en conclase.net


Más información sobre la lista de distribución Cconclase