반응형
윈도우 프로그래밍에서 메시지는 윈도우 간 통신과 이벤트 처리의 핵심적인 역할을 합니다. SendMessage와 PostMessage 함수는 윈도우 간 메시지를 전달하는 데 사용되는 두 가지 주요 API입니다.
SendMessage
특정 윈도우에 메세지를 직접 전달하고 즉시 결과를 반환합니다. 즉, 메세지가 처리될 때까지 기다립니다.
[DllImport("user32.dll")]
public static extern IntPtr SendMessage(int hwnd, int wMsg, int wParam, string lParam);
// hwnd 메세지를 전달할 윈도우의 핸들
// wMsg 잔달할 메세지 ID
// wParam 메세지와 함께 전달할 추가 데이터
// lParam 메세지와 함께 전달할 추가 데이터
// 반환 값 : 메세지 처리 결과를 나타내는 IntPtr 값
PostMessage
특정 윈도우에 메세지를 전달하고 즉시 반환하지 않습니다. 메세지 큐에 메세지를 추가하고 메세지 처리 루프에서 처리될 때까지 기다립니다.
[DllImport("user32.dll")]
public static extern uint PostMessage(int hwnd, uint msg, int wParam, int lParam);
// 매개변수는 SendMessage와 같습니다.
// 반환값 : 0(성공) 또는 오류 코드
SendMessage vs PostMessage
구분 | SendMessage | PostMessage |
동기/ 비동기 | 동기 | 비동기 |
반환값 | 메세지 처리 결과 | 0 또는 오류코드 |
사용 시점 | 즉각적인 결과가 필요한 경우 | 즉각적인 결과가 중요하지 않거나 메세지 큐에 메세지를 추가하고 싶은 경우 |
주의사항
- SendMessage와 PostMessage 함수를 사용할 때는 윈도우 핸들을 정확하게 지정해야 합니다. 잘못된 핸들을 지정하면 예상치 못한 동작을 일으킬 수 있습니다.
- 메시지 ID와 추가 데이터는 전달하려는 메시지에 따라 정확하게 지정해야 합니다. 잘못된 값을 지정하면 오류가 발생할 수 있습니다.
'C# > Window' 카테고리의 다른 글
Windows Forms의 ComboBox에 아이템 추가하는 방법들 (0) | 2024.07.29 |
---|---|
.NET 프로젝트의 출력 폴더 이름 변경하기 (0) | 2024.07.28 |
Windows Forms PictureBox (3) | 2024.07.24 |
RichTextBox에 텍스트 추가하고 자동 스크롤하기 (0) | 2024.07.23 |
비동기 프로그래밍에서 Task.Delay의 독립적인 실행 (0) | 2024.07.22 |