반응형
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
가 적합합니다.
주의할 점
hWnd
가 유효하지 않으면 메시지가 전달되지 않습니다.- 메시지는 큐에 들어간 후 차례대로 처리되므로, 즉각적인 반응이 필요한 경우 적절하지 않습니다.
- 사용자 정의 메시지는
WM_USER
또는WM_APP
이후의 값으로 정의해야 충돌을 피할 수 있습니다.
정리
Visual Studio C++에서 PostMessage
는 메시지를 비동기적으로 전달할 수 있는 강력한 함수입니다.
SendMessage
와 차이를 이해하고 상황에 맞게 선택한다면, Win32 API 프로그래밍에서 안정적이고 효율적인 이벤트 처리가 가능합니다.
반응형
'c++' 카테고리의 다른 글
Visual Studio C++ MFC CRect 사용법 (0) | 2025.09.18 |
---|---|
Visual Studio C++ SendMessage 사용법 정리 (0) | 2025.09.18 |
Visual Studio C++에서 libcurl로 JSON 요청/응답 처리하기 (0) | 2025.09.18 |
[C++] 메모리누수와 해결방안 (0) | 2025.03.24 |
[C++] 메모리 누수 (1) | 2025.03.09 |