Dialog간의 통신이나 이벤트 발생시에 많이 사용하게 되는 사용자 정의 메세지 사용법.
1. 메세지를 정의한다.
- 헤더파일에 다음과 같은 형식으로 정의
#define WM_TEST_MESSAGE WM_USER+10;
2. 메세지를 통해서 호출할 함수의 원형선언 및 구현.
- 메세지를 받는 쪽 Dialog의 헤더에 함수원형을 선언한다.
헤더파일의 아래쪽 // Generated message map functions이라고 주석처리된 부분 밑에
아래와 같은 형식으로 선언
afx_msg LRESULT UserMSG(WPARAM wParam, LPARAM lParam);
- cpp파일에 함수구현.
3. MESSAGE MAP에 등록.
- cpp파일의 메세지 맵에 등록하여 정의된 메세지와 메세지를 통해 호출할 함수를 연결시켜준
다.
- cpp파일의 위쪽에 아래와 같은 형식으로 메세지 맵이 있고, 프로젝트 생성시에 자동으로 등
록된 여러가지 메세지들이 있을 것이다. BEGIN_MESSAGE_MAP과 END_MESSAGE_MAP
의 사이에 ON_MESSAGE를 이용하여 아래와 같이 등록
BEGIN_MESSAGE_MAP("메세지를 받는 쪽 Dialog의 클래스명", CDialog)
//{{AFX_MSG_MAP("메세지를 받는 쪽 Dialog의 클래스명")
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_DESTROY()
ON_MESSAGE(WM_TEST_MESSAGE, UserMSG)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
4. 사용자 정의 메세지 사용.
- SendMessage 또는 PostMessage함수를 이용하여 사용.
- 파라미터로 넘길 데이터가 있으면 wParam 또는 lParam을 이용.
- cpp파일에 함수구현.
3. MESSAGE MAP에 등록.
- cpp파일의 메세지 맵에 등록하여 정의된 메세지와 메세지를 통해 호출할 함수를 연결시켜준
다.
- cpp파일의 위쪽에 아래와 같은 형식으로 메세지 맵이 있고, 프로젝트 생성시에 자동으로 등
록된 여러가지 메세지들이 있을 것이다. BEGIN_MESSAGE_MAP과 END_MESSAGE_MAP
의 사이에 ON_MESSAGE를 이용하여 아래와 같이 등록
BEGIN_MESSAGE_MAP("메세지를 받는 쪽 Dialog의 클래스명", CDialog)
//{{AFX_MSG_MAP("메세지를 받는 쪽 Dialog의 클래스명")
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_DESTROY()
ON_MESSAGE(WM_TEST_MESSAGE, UserMSG)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
4. 사용자 정의 메세지 사용.
- SendMessage 또는 PostMessage함수를 이용하여 사용.
- 파라미터로 넘길 데이터가 있으면 wParam 또는 lParam을 이용.