SendMessage & PostMessage
SendMessage : 비큐메시지
즉 프로시저를 직접 호출 한다.
PostMessage : 큐메시지
메시지 큐에 메시지를 저장한다.
위 함수들을 이용해서 사용자 정의 메시지를 등록하고 사용할 수 있다.
#include <windows.h>
#include <tchar.h>
#define WM_MYMESSAGE WM_USER+100
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch( msg )
{
case WM_MYMESSAGE:
{
TCHAR buf[20];
wsprintf(buf, TEXT("%d+%d=%d"), wParam, lParam, wParam+lParam);
MessageBox(hwnd, buf, TEXT(""), MB_OK);
43
}
return 0;
case WM_LBUTTONDOWN:
SendMessage(hwnd, WM_MYMESSAGE, 10, 20);
return 0;
case WM_CREATE:
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, msg, wParam, lParam);
이를 통해 윈도우 끼리의 메시지 통신도 가능하다.
#include <Windows.h>
#include <stdio.h>
#define WM_MYMESSAGE WM_USER+100
void main()
{
HWND hwnd = FindWindow(0, TEXT("Hello"));
int value = SendMessage(hwnd, WM_MYMESSAGE, 10, 20);
printf("%d\n", value);
}
#define WM_MYMESSAGE WM_USER+100
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch( msg )
{
case WM_MYMESSAGE:
{
TCHAR buf[20];
wsprintf(buf, TEXT("%d+%d=%d"), wParam, lParam, wParam+lParam);
MessageBox(hwnd, buf, TEXT(""), MB_OK);
}
return wParam + lParam;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
#include <Windows.h>
#include <stdio.h>
#define WM_MYMESSAGE WM_USER+100
void main()
{
HWND hwnd = FindWindow(0, TEXT("Hello"));
BOOL b = PostMessage(hwnd, WM_MYMESSAGE, 10, 20);
if( b == true)
{
printf("전송 되었습니다.\n");
}
printf("프로그램을 종료합니다.\n");
}
PostMessage는 보편적이 사용방법은 아니다
아까 말했듯이 PostMessage는 리턴 값이 성공과 실패 여부이다.
'API Programming' 카테고리의 다른 글
[API] 문자열 출력 TextOut() & DrawText() (0) | 2024.03.07 |
---|---|
[API] DC(Device Context) 란? (0) | 2024.03.06 |
[API] 메시지 큐에서 메시지 가져오기 (0) | 2024.03.06 |
[API] 스켈레톤 기본 코드를 이용해서 기능 구현하기 (1) | 2024.03.06 |
[API] skeleton 코드 (0) | 2024.03.06 |