반응형
Visual Studio C++ SendMessage 사용법 정리
Windows 프로그래밍에서 메시지(Message)는 프로그램 동작의 핵심입니다.
키보드 입력, 마우스 클릭, 윈도우 이동 등 모든 이벤트가 메시지로 전달됩니다.
Win32 API에서 메시지를 다룰 때 자주 쓰이는 함수 중 하나가 SendMessage
입니다.
SendMessage란?
SendMessage
는 지정한 윈도우 프로시저(WndProc
)에 메시지를 즉시 보내고, 그 결과가 처리될 때까지 기다리는 함수입니다. 즉, SendMessage
는 동기적(synchronous)으로 동작하며, 메시지가 처리된 후 리턴 값을 돌려줍니다.
함수 원형
LRESULT SendMessage(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);
hWnd
: 메시지를 받을 윈도우의 핸들Msg
: 보낼 메시지 (예:WM_COMMAND
,WM_SETTEXT
등)wParam
: 메시지에 따른 추가 정보lParam
: 메시지에 따른 추가 정보
기본 사용 예제
Visual Studio C++에서 SendMessage
를 사용하는 간단한 예제를 살펴보겠습니다.
이번 예제에서는 에디트 컨트롤(Edit Control)에 문자열을 설정하는 방법을 보여줍니다.
1. 에디트 컨트롤에 텍스트 설정
// 에디트 컨트롤 핸들
HWND hEdit = GetDlgItem(hWnd, IDC_EDIT1);
// 문자열 설정
SendMessage(hEdit, WM_SETTEXT, 0, (LPARAM)L"Hello, SendMessage!");
2. 에디트 컨트롤에서 텍스트 가져오기
WCHAR buffer[256];
SendMessage(hEdit, WM_GETTEXT, (WPARAM)256, (LPARAM)buffer);
MessageBox(hWnd, buffer, L"Edit Control Text", MB_OK);
위 예제에서 WM_SETTEXT
, WM_GETTEXT
메시지를 사용하여 에디트 컨트롤과 데이터를 주고받을 수 있습니다.
SendMessage vs PostMessage
구분 | SendMessage | PostMessage |
---|---|---|
처리 방식 | 동기 (즉시 실행) | 비동기 (메시지 큐에 저장 후 실행) |
리턴 값 | 메시지 처리 결과를 반환 | 리턴 없음 |
사용 예 | 컨트롤 텍스트 변경, 값 조회 등 즉시 반영이 필요한 경우 | UI 이벤트 전달, 긴 작업 요청 등 즉각적 처리 불필요한 경우 |
주의할 점
SendMessage
는 메시지가 처리될 때까지 대기하기 때문에, 긴 작업에서는 프로그램이 멈춘 것처럼 보일 수 있습니다.- 서로 다른 쓰레드 간
SendMessage
호출은 교착상태(deadlock)를 유발할 수 있습니다. - 즉시 결과가 필요하지 않은 작업이라면
PostMessage
를 고려하는 것이 좋습니다.
정리
Visual Studio C++에서 SendMessage
는 메시지를 동기적으로 처리하는 강력한 함수입니다. 컨트롤에 값을 설정하거나 가져올 때 자주 사용되며, PostMessage
와의 차이를 이해하는 것이 중요합니다. 올바른 상황에서 SendMessage
를 활용하면 안정적이고 예측 가능한 윈도우 프로그래밍이 가능합니다.
반응형
'c++' 카테고리의 다른 글
[C++ STL 시리즈] 1편: STL 개요 및 vector 사용법 (0) | 2025.09.19 |
---|---|
Visual Studio C++ MFC CRect 사용법 (0) | 2025.09.18 |
Visual Studio C++ PostMessage 사용법 정리 (0) | 2025.09.18 |
Visual Studio C++에서 libcurl로 JSON 요청/응답 처리하기 (0) | 2025.09.18 |
[C++] 메모리누수와 해결방안 (0) | 2025.03.24 |