비타Cpp

Message 관련 API함수 본문

WIN32_API/메모

Message 관련 API함수

멍C 2020. 4. 25. 15:14

WinAPI는 메세지 전달 방식으로 돌아간다.

 

프로그램이 종료 될때까지 반복문에서 계속 메세지를 주고 받는 형식인데 이에 관련된 함수들이 있다.

 

1)PeekMessage


MSDN 의 정의:

Dispatches incoming sent messages, checks the thread message queue for a posted message, and retrieves the message (if any exist).

 

수신된 발신 메세지를 전송하고,  게시된 메세지에 대한 메세지 큐를 체크 하고 해당 메세지를 검색 합니다(메세지가 있는 경우).

 


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

 

Parameters:

LPMSG lpMsg

- 메세지 정보를 받는 MSG구조체에 대한 포인터

 

HWND hWnd

- 검색될 메세지의 윈도우에 대한 핸들 

- 만약 hWnd가 NULL일 경우, PeekMessage는 현재 스레드에 속한 아무 윈도우의 메세지와 hwnd값이 NULL인 현재 스레드 큐에 있는 메세지를 검색합니다. 따라서 hWnd가 NULL이면 윈도우 메세지와 스레드 메세지 구분 없이 모두 처리됩니다.

- 만약 hWnd가 -1이면 PeekMessage는 현재 스레드 메세지큐에서 hwnd가 NULL인 메세지만 검색 합니다.

 

UINT wMsgFilterMin

- 검사할 메세지 범위의 첫 번째 메세지 값입니다.

 

UINT wMsgFilterMax

- 검사할 메세지 범위의 마지막 메세지 값입니다.

 

UINT wRemoveMsg

- 메세지 처리방법을 지정 합니다. 이 Parameter는 다음중 하나 일 수 있습니다.

 

#define PM_NOREMOVE         0x0000 //PeekMessage가 처리한 후에 큐에서 제거 하지 않습니다.
#define PM_REMOVE           0x0001 //PeekMessage가 처리한 후에 큐에서 제거합니다.
#define PM_NOYIELD          0x0002 //시스템이 호출자가 Idle 상태가되기를 기다리는 스레드를 해제하지 못하게합니다 

 

2)TranslateMessage


MSDN의 정의:

 

Translates virtual-key messages into character messages. The character messages are posted to the calling thread's message queue, to be read the next time the thread calls the GetMessage or PeekMessage function.

 

가상 키 메세지를 Character(문자)메세지로 변환 합니다. Character 메세지는 다음에 스레드가 Getmessage나 PeekMessage 함수를 호출 할때 읽을 수 있도록 콜 스레드의 메세지 큐에 게시 됩니다.


BOOL TranslateMessage(
  const MSG *lpMsg
);

Parameters:

 

const MSG* lpMsg

- GetMessage 또는 PeekMessage함수를 사용하여 호출 스레드의 메세지 큐에서 검색된 메세지 정보를 포함하는 MSG구조체의 포인터

 

 

3)DispatchMessage


MSDN의 정의:

 

Dispatches a message to a window procedure. It is typically used to dispatch a message retrieved by the GetMessage function.

 

윈도우 프러시져에 메세지를 전달합니다. 일반적으로 GetMessage에 의해서 검색된 메세지가 전달됩니다.


LRESULT DispatchMessage(
  const MSG *lpMsg
);

Parameters:

 

const MSG* lpMsg

- 메세지가 포함된 구조체의 포인터

 


 

PeekMessage 말고도 GetMessage 라는 메세지 처리 함수가 있습니다.

 

GetMessage는 메세지가 발생 하지않으면 호출되지 않지만 PeekMessage는 메세지 처리가 계속 이루어집니다.

 

그래서 실시간으로 메세지 처리가 이루어져야 하는 구조에서는 GetMessage보다는 PeekMessage를 사용하는것이 좋습니다.

 

 

 

 

 

 

'WIN32_API > 메모' 카테고리의 다른 글

WPARAM, LPARAM  (0) 2020.05.16
Comments