PeekMessage
BOOL PeekMessage(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg);
LPMSG lpMsg
- 포인터.(메시지 정보를 전달받을 메세지 구조체의 주소)
HWND hWnd
- 메시지를 받아올 윈도우의 핸들. NULL일 경우 시스템 큐와 메시지 큐를 모두 확인한다.
UINT wMsgFilterMin
- 메시지 큐에서 조사하는 메시지의 최소 범위.
UINT wMsgFilterMax
- 메시지 큐에서 조사하는 메시지의 최대 범위.
wMsgFilterMin과 wMsgFilterMax를 이용해서 일정한 범위에 속하는 메시지를 조사할 수 있게 된다. 예를 들어 WM_KEYFIRST와 WM_KEYLAST를 사용해서 키보드에 관련한 메시지를 조사하거나 WM_MOUSEFIRST와 WM_MOUSELAST를 사용하여 마우스에 관한 메시지를 조사할 수 있다. 이 두개의 인자를 0, 0으로 지정한다면 따로 조사 범위를 지정하지 않고 전부 조사를 한다.
UINT wRemoveMsg
- 조사한 메시지의 처리 방법. 메시지 큐에서 메시지 삭제 여부를 결정(조사한 메시지에 대해서).
wRemoveMsg 플래그.
- PM_NOREMOVE
메시지를 읽은 후 큐에서 제거하지 않는다.
- PM_REMOVE
메시지를 읽은 후 큐에서 제거한다.
- PM_NOYIELD
다른 쓰레드로 제어를 양보하지 않는다(다른 쓰레드로 풀어주는 것을 막는다고 적혀있는데 아마도 이 메시지에 대해서 혼자 처리를 하면서 동시에 다른 쓰레드에서 와서 읽는 것을
막는 것으로 보인다). PM_NOREMOVE 나 PM_REMOVE와 |(or)연산으로 합산해서 Flag를 사용한다.
기본적으로 모든 메시지에대해 처리하는 것이 디폴트로 설정되어 있으며 다음 값으로 어떤 특정 메시지에대해서 처리하도록 하는 것도 가능하다.
- PM_QS_INPUT (QS_INPUT << 16)
마우스와 키보드 메시지를 처리한다.
- PM_QS_PAINT (QS_PAINT << 16)
paint메시지를 처리한다.
- PM_QS_POSTMESSAGE (QS_POSTMESSAGE | QS_HOTKEY | QS_TIMER << 16)
핫키와 타이머가 포함된 메시지를 처리한다.(posted message?)
- PM_QS_SENDMESSAGE (QS_SENDMESSAGE << 16)
보내지는 메시지를 처리한다. (send메시지를 처리하는 걸로 보여진다.)
PeekMessage의 경우 GetMessage와는 다르게 메세지의 유무에 상관 없이 리턴됩니다. GetMessage의 경우 메시지가 없다면 대기를 하지만 PeekMessage의 경우 없더라도 기다리지 않고 바로 리턴합니다. 반환 값도 메시지가 있다면 0이 아닌 값, 메시지가 없으면 0을 리턴하여 GetMessage와는 다른 처리가 필요합니다.( WM_QUIT 메시지의 경우에 종료에 대한 처리를 해주어야 합니다.)
출처 - http://msdn.microsoft.com/en-us/library/windows/desktop/ms644943(v=vs.85).aspx
'Program Languege > WinAPI' 카테고리의 다른 글
TransparentBlt, AlphaBlend, GdiTranslaparentBlt, GdiAlphaBlend (0) | 2014.04.15 |
---|---|
QueryPerformance (0) | 2014.04.10 |
GDI 오브젝트 (0) | 2014.04.02 |
GetKeyState & GetAsyncState (0) | 2014.03.29 |
HINSTANCE (0) | 2014.03.25 |