c++

Visual Studio C++ PostMessage 사용법 정리

개발에대해 2025. 9. 18. 15:03
반응형

 

Visual Studio C++에서 PostMessage 사용법 정리

Windows 프로그래밍에서 메시지(Message)는 매우 중요한 개념입니다.

버튼 클릭, 키보드 입력, 윈도우 이동과 같은 모든 동작이 사실상 메시지로 전달되기 때문입니다.

Visual Studio C++ 환경에서 Win32 API를 사용할 때 자주 접하는 함수 중 하나가 바로 PostMessage입니다.

 

PostMessage란?

PostMessage는 지정한 윈도우의 메시지 큐에 메시지를 넣어주는 함수입니다.

즉시 메시지를 처리하지 않고 큐에 비동기적으로 전달한다는 점이 특징입니다.

반대로 SendMessage는 메시지를 즉시 처리할 때 사용합니다.

 

함수 원형


BOOL PostMessage(
  HWND   hWnd,
  UINT   Msg,
  WPARAM wParam,
  LPARAM lParam
);
  
  • hWnd : 메시지를 받을 윈도우의 핸들
  • Msg : 보낼 메시지 (예: WM_COMMAND, WM_USER 등)
  • wParam : 추가 정보 (메시지마다 의미가 다름)
  • lParam : 추가 정보 (메시지마다 의미가 다름)

 

기본 사용 예제

 

아래는 Visual Studio C++에서 PostMessage를 사용해 사용자 정의 메시지를 보내고 처리하는 간단한 예제 코드입니다.

 

1. 사용자 정의 메시지 선언


#define WM_MY_MESSAGE (WM_USER + 1)
  

 

2. 메시지 전송 코드


// 어떤 이벤트가 발생했을 때 메시지 전송
HWND hWndTarget = hWnd; // 메시지를 받을 윈도우 핸들
PostMessage(hWndTarget, WM_MY_MESSAGE, 0, 0);
  

 

3. 메시지 처리 (윈도우 프로시저)


LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_MY_MESSAGE:
        MessageBox(hWnd, L"사용자 정의 메시지를 받았습니다!", L"알림", MB_OK);
        return 0;

    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }

    return DefWindowProc(hWnd, message, wParam, lParam);
}
  

 

위 예제에서는 WM_USER 이후의 값으로 사용자 정의 메시지를 선언하고, PostMessage를 통해 메시지를 큐에 넣은 뒤, WndProc에서 해당 메시지를 처리하도록 구성했습니다.

 

PostMessage vs SendMessage

  • PostMessage : 메시지를 큐에 넣고 바로 리턴 (비동기)
  • SendMessage : 메시지를 즉시 처리할 때까지 대기 (동기)

따라서 긴 시간이 소요될 수 있는 작업은 PostMessage를 활용하는 것이 유리하며,

즉시 결과가 필요한 경우에는 SendMessage가 적합합니다.

 

주의할 점

  1. hWnd가 유효하지 않으면 메시지가 전달되지 않습니다.
  2. 메시지는 큐에 들어간 후 차례대로 처리되므로, 즉각적인 반응이 필요한 경우 적절하지 않습니다.
  3. 사용자 정의 메시지는 WM_USER 또는 WM_APP 이후의 값으로 정의해야 충돌을 피할 수 있습니다.

 

정리

Visual Studio C++에서 PostMessage는 메시지를 비동기적으로 전달할 수 있는 강력한 함수입니다.

SendMessage와 차이를 이해하고 상황에 맞게 선택한다면, Win32 API 프로그래밍에서 안정적이고 효율적인 이벤트 처리가 가능합니다.

반응형