GetMessage

This function retrieves a message from the calling thread’s message queue and places it in the specified structure.

At a Glance

Header file: Winuser.h
Windows CE versions: 1.0 and later

Syntax

BOOL GetMessage(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax);

Parameters

lpMsg

[out] Long pointer to an MSG structure that receives message information from the thread’s message queue.

hWnd

[in] Handle to the window whose messages are to be retrieved. One value has a special meaning:

Value Description
NULL GetMessage retrieves messages for any window that belongs to the calling thread and thread messages posted to the calling thread by means of PostThreadMessage.

wMsgFilterMin

[in] Specifies the integer value of the lowest message value to be retrieved.

wMsgFilterMax

[in] Specifies the integer value of the highest message value to be retrieved.

Return Values

Nonzero indicates that the function retrieves a message other than WM_QUIT. Zero indicates that the function retrieves the WM_QUIT message. –1 indicates that an error occurred—for example, the function fails if hWnd is an invalid window handle or lpMsg is an invalid pointer. To get extended error information, call GetLastError.

Remarks

An application typically uses the return value to determine whether to end the main message loop and exit the program.

The GetMessage function only retrieves messages associated with the window identified by the hWnd parameter or any of its children, as specified by the IsChild function, and within the range of message values given by the wMsgFilterMin and wMsgFilterMax parameters. If hWnd is NULL, GetMessage retrieves messages for any window that belongs to the calling thread and thread messages posted to the calling thread by means of PostThreadMessage. GetMessage does not retrieve messages for windows that belong to other threads nor for threads other than the calling thread, even if hWnd is not NULL. Thread messages, posted by the PostThreadMessage function, have a message hWnd value of NULL. If wMsgFilterMin and wMsgFilterMax are both zero, GetMessage returns all available messages (that is, no range filtering is performed).

The WM_KEYFIRST and WM_KEYLAST constants can be used as filter values to retrieve all messages related to keyboard input; the WM_MOUSEFIRST and WM_MOUSELAST constants can be used to retrieve all mouse messages. If the wMsgFilterMin and wMsgFilterMax parameters are both zero, the GetMessage function returns all available messages (that is, without performing any filtering).

GetMessage does not remove WM_PAINT messages from the queue. The messages remain in the queue until processed.

Note that the function return value can be nonzero, zero, or –1. Thus, you should avoid code like this:

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

The possibility of a –1 return value means that such code can lead to fatal application errors.

See Also

IsChild, MSG, PeekMessage, PostMessage, PostThreadMessage