GetMessageW 함수(winuser.h)
호출 스레드의 메시지 큐에서 메시지를 검색합니다. 함수는 게시된 메시지를 검색할 수 있을 때까지 들어오는 보낸 메시지를 디스패치합니다.
GetMessage달리 PeekMessage 함수는 반환하기 전에 메시지가 게시될 때까지 기다리지 않습니다.
통사론
BOOL GetMessageW(
[out] LPMSG lpMsg,
[in, optional] HWND hWnd,
[in] UINT wMsgFilterMin,
[in] UINT wMsgFilterMax
);
매개 변수
[out] lpMsg
형식: LPMSG
스레드의 메시지 큐에서 메시지 정보를 수신하는 MSG 구조체에 대한 포인터입니다.
[in, optional] hWnd
형식: HWND
메시지를 검색할 창에 대한 핸들입니다. 창은 현재 스레드에 속해야 합니다.
[in] wMsgFilterMin
형식: UINT
검색할 가장 낮은 메시지 값의 정수 값입니다. WM_KEYFIRST(0x0100)를 사용하여 첫 번째 키보드 메시지 또는 WM_MOUSEFIRST(0x0200)를 지정하여 첫 번째 마우스 메시지를 지정합니다.
여기와 wMsgFilterMaxWM_INPUT 사용하여 WM_INPUT 메시지만 지정합니다.
wMsgFilterMin 및 wMsgFilterMax 모두 0이면 GetMessage 사용 가능한 모든 메시지를 반환합니다(즉, 범위 필터링이 수행되지 않음).
[in] wMsgFilterMax
형식: UINT
검색할 가장 높은 메시지 값의 정수 값입니다. WM_KEYLAST 사용하여 마지막 키보드 메시지 또는 WM_MOUSELAST 지정하여 마지막 마우스 메시지를 지정합니다.
wMsgFilterMin 여기와
wMsgFilterMin 및 wMsgFilterMax 모두 0이면 GetMessage 사용 가능한 모든 메시지를 반환합니다(즉, 범위 필터링이 수행되지 않음).
반환 값
형식: BOOL
함수가 WM_QUIT이외의 메시지를 검색하는 경우 반환 값은 0이 아닌 값입니다.
함수가 WM_QUIT 메시지를 검색하는 경우 반환 값은 0입니다.
오류가 있는 경우 반환 값은 -1입니다. 예를 들어 hWnd 잘못된 창 핸들이거나 lpMsg 잘못된 포인터인 경우 함수가 실패합니다. 확장 오류 정보를 얻으려면 GetLastError호출합니다.
반환 값은 0이 아니거나 0이거나 -1일 수 있으므로 다음과 같은 코드를 사용하지 마세요.
while (GetMessage( lpMsg, hWnd, 0, 0)) ...
hWnd가 잘못된 매개 변수(예: 이미 삭제된 창 참조)인 경우 -1 반환 값의 가능성은 이러한 코드로 인해 심각한 애플리케이션 오류가 발생할 수 있음을 의미합니다. 대신 다음과 같은 코드를 사용합니다.
BOOL bRet;
while( (bRet = GetMessage( &msg, hWnd, 0, 0 )) != 0)
{
if (bRet == -1)
{
// handle the error and possibly exit
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
발언
애플리케이션은 일반적으로 반환 값을 사용하여 기본 메시지 루프를 종료하고 프로그램을 종료할지 여부를 결정합니다.
GetMessage 함수는 IsChild 함수에 지정된 대로 hWnd 매개 변수 또는 해당 자식으로 식별된 창과 연결된 메시지를 검색하고, wMsgFilterMin 및 wMsgFilterMax 매개 변수에서 제공한 메시지 값 범위 내에서 메시지를 검색합니다. 애플리케이션은 wMsgFilterMin 및 wMsgFilterMax 매개 변수에서만 소문자를 사용할 수 있습니다. 높은 단어는 시스템에 예약되어 있습니다.
GetMessagewMsgFilterMin 및 wMsgFilterMax대해 지정한 값에 관계없이 항상 WM_QUIT 메시지를 검색합니다.
이 호출 중에 시스템은 큐에 추가되지 않은 보류 중인 메시지, 즉 SendMessage, SendMessageCallback, SendMessageTimeout또는 SendNotifyMessage 함수를 사용하여 호출 스레드가 소유한 창으로 전송되는 메시지를 배달합니다. 그런 다음 지정된 필터와 일치하는 첫 번째 큐에 대기 중인 메시지가 검색됩니다. 시스템은 내부 이벤트를 처리할 수도 있습니다. 필터를 지정하지 않으면 메시지는 다음 순서로 처리됩니다.
게시된 메시지 전에 입력 메시지를 검색하려면GetMessage 큐에서 WM_PAINT 메시지를 제거하지 않습니다. 메시지는 처리될 때까지 큐에 남아 있습니다.
최상위 창이 몇 초 이상 메시지에 응답하지 않는 경우 시스템은 창이 응답하지 않는 것으로 간주하고 z 순서, 위치, 크기 및 시각적 특성이 동일한 고스트 창으로 바꿉니다. 이렇게 하면 사용자가 이동하거나 크기를 조정하거나 애플리케이션을 닫을 수 있습니다. 그러나 애플리케이션이 실제로 응답하지 않기 때문에 이러한 작업만 사용할 수 있습니다. 디버거 모드에서는 시스템에서 고스트 창을 생성하지 않습니다.
DPI 가상화
이 API는 DPI 가상화에 참여하지 않습니다. 출력은 메시지가 대상으로 하는 창의 모드에 있습니다. 호출 스레드는 고려되지 않습니다.예제
예제는 메시지 루프만들기를 참조하세요.
메모
winuser.h 헤더는 GETMessage를 유니코드 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입대한
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000 Professional [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows 2000 Server [데스크톱 앱만 해당] |
대상 플랫폼 | Windows |
헤더 | winuser.h(Windows.h 포함) |
라이브러리 | User32.lib |
DLL | User32.dll |
API 집합 | ext-ms-win-ntuser-message-l1-1-0(Windows 8에서 도입) |
참고 항목
개념
MSG
메시지 및 메시지 큐
peekMessage
참조
waitMessage