c++

Visual Studio C++ SendMessage 사용법 정리

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

 

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 이벤트 전달, 긴 작업 요청 등 즉각적 처리 불필요한 경우

 

주의할 점

  1. SendMessage는 메시지가 처리될 때까지 대기하기 때문에, 긴 작업에서는 프로그램이 멈춘 것처럼 보일 수 있습니다.
  2. 서로 다른 쓰레드 간 SendMessage 호출은 교착상태(deadlock)를 유발할 수 있습니다.
  3. 즉시 결과가 필요하지 않은 작업이라면 PostMessage를 고려하는 것이 좋습니다.

 

정리

Visual Studio C++에서 SendMessage는 메시지를 동기적으로 처리하는 강력한 함수입니다. 컨트롤에 값을 설정하거나 가져올 때 자주 사용되며, PostMessage와의 차이를 이해하는 것이 중요합니다. 올바른 상황에서 SendMessage를 활용하면 안정적이고 예측 가능한 윈도우 프로그래밍이 가능합니다.

반응형