👨🏻‍💻 programming/◽ Framework

[Framework] 1. 사용자 지정/정의 메세지(Message) 사용하기, 메시지 맵(MFC)

핑크코냥 2024. 1. 16. 16:57
728x90

일하다 "#define ID_MYMESSAGE WM_USER+1" 이런 식으로 정의 된 디파인을 보고 WM_USER가 무엇이며.. 어떻게 사용하는지 궁금해서 정리해본다..위와 같은 정의는 사용자 지정/정의 메세지를 사용하기 위한 messageID를 부여하는 코드 였으며 메시지 맵을 만드는 과정은 아래와 같다.

 

1. 사용자 정의 함수를 만든다. (메시지 핸들러를 정의한다.)

사용자 정의 함수는 정해진 함수틀(원형)이 있다. 아래와 같게 함수틀을 지켜서 정의 해야한다.

afx_msg LRESULT MyPinkoFunc(WPARAM wParam, LPARAM lParam)
{
	return (0);
}

 

 

2. ON_MESSAGE

ON_MESSAGE( message, memberFxn )
  • message : 메시지 ID
  • memberFxn : 메시지가 매핑되는 메시지 처리 함수의 이름

※ 메시지ID : WM_USER값을 사용해야한다. 

<WinUser.h>
/* Private Window Messages Start Here : */
#define WM_USER 0x4000 == (int)1024
0~WM_USER –1 시스템에서 사용하도록 예약된 메시지입니다.
0x7FFF 통해 WM_USER 프라이빗 창 클래스에서 사용할 정수 메시지입니다.
0xBFFF 통해 WM_APP 애플리케이션에서 사용할 수 있는 메시지입니다.
0xFFFF 통해 0xC000 애플리케이션에서 사용할 문자열 메시지입니다.
0xFFFF 초과 시스템에서 예약합니다.

 

3. SendMessage, PostMessage API에 메시지를 보낸다. 

LRESULT SendMessage( 
  _In_opt_ HWND hWnd,
  _In_ UINT Msg,
  _In_ WPARAM wParam,
  _In_ LPARAM lParam
);
 
BOOL PostMessage(
  _In_opt_ HWND hWnd,
  _In_ UINT Msg,
  _In_ WPARAM wParam,
  _In_ LPARAM lParam
);

※ PostMessage와 SendMessage의 차이 

  SendMessage PostMessage
리턴값 LRESULT BOOL
동작 윈도우 프로시저로 보내 즉각 처리하도록함. hWnd윈도우 메시지 큐에 집어 넣고 바로 리턴함.
활용   - 급하게 처리할 필요 없는 메시지를 처리 
- 순서가 있는 작업 처리

 

728x90