winuser.h


GetMessage

Recupera un mensaje de la lista de mensajes de la aplicación y lo coloca en la estructura especificada. Esta función puede recuperar tanto mensajes asociados con una ventana concreta, como mensajes enviados con la función PostThreadMessage. La función recuperará los mensajes en el rango especificado. Pero no recuperará mensajes de ventanas que pertenezcan a otros procesos o aplicaciones.

Sintaxis

BOOL GetMessage( 
   LPMSG lpMsg, // puntero a la estructura que contendrá el mensaje 
   HWND hWnd, // manipulador de ventana
   UINT wMsgFilterMin, // primer mensaje 
   UINT wMsgFilterMax // último mensaje
); 

Parámetros

lpMsg: puntero a una estructura de tipo MSG que recibirá la información sobre el mensaje procedente de la lista de mensajes del proceso.

hWnd: identificador de la ventana de la que se recibirán los mensajes. Si el valor es NULL GetMessage recibirá mensajes para cualquier ventana que pertenezca al proceso desde el que se llama, o mensajes enviados al proceso usando PostThreadMessage.

wMsgFilterMin: especifica el valor entero para el límite inferior del rango de mensajes a recibir.

wMsgFilterMax: especifica el valor entero para el límite superior del rango de mensajes a recibir.

Valor de retorno

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.

Observaciones

Normalmente, el valor de retorno se usa para detectar el final del bucle de mensajes y salir del programa.

Esta función sólo recibe mensajes asociados a la ventana identificada por el parámetro hWnd o cualquiera de sus ventanas hija y dentro del rango de mensajes especificado por los parámetros wMsgFilterMin y wMsgFilterMax. Si hWnd es NULL la función tomará mensajes procedentes de cualquier ventana que pertenezca al proceso desde donde se usa y mensajes enviados a través de PostThreadMessage. Esta función no recibe mensajes de ventanas que pertenezcan a otros procesos ni tampoco de otros procesos. Los mensajes de procesos, enviados por la función PostThreadMessage, tienen como valor de hWnd NULL. Si wMsgFilterMin y wMsgFilterMax son cero, la función tomará todos los mensajes disponibles, es decir, no se filtran los mensajes.

Las constantes WM_KEYFIRST y WM_KEYLAST pueden usarse para filtrar los mensajes procedentes desde el teclado; las constantes WM_MOUSEFIRST y WM_MOUSELAST para filtrar los mensajes procedentes del ratón.

GetMessage no retira los mensajes WM_PAINT de la lista de mensajes. Estos mensajes permanecen en la lista hasta que son procesados.

Observa que la función puede retornar con TRUE, FALSE, o -1. Así que se debe evitar usar expresiones como:

while (GetMessage( lpMsg, hWnd, 0, 0)) ... 

La posibilidad de un valor de retorno de -1 significa que la aplicación puede obtener errores fatales.