본문 바로가기
API Programming

[API] 메시지 프로시저 호출하기 SendMessage & PostMessage

by cod1ng 2024. 3. 6.

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는  리턴 값이 성공과 실패 여부이다.