[1] 어딘가 Windows Message를 사용할 Dialog 의 헤더나 View의 헤더파일을 찾는다.
    그 다음 아래 형태로 사용자 메시지를 정의한다.

1
2
#define UM_MESSAGE1 (WM_USER + 1)
#define UM_MESSAGE2 (WM_USER + 2)
... 



[2] 그 다음은 위에서 찾은 헤더파일에 DECLARE_MESSAGE_MAP() 을 찾는다.
     2번줄 3번줄 형태의 함수를 선언한다.
 
1
2
3
4
5
//{{AFX_MSG(CWinDisplay)
afx_msg LRESULT OnUserMessage1(UINT wParam, LONG lParam);
afx_msg LRESULT OnUserMessage2(UINT wParam, LONG lParam); 
//}}AFX_MSG
DECLARE_MESSAGE_MAP()


[3] 다음은 CPP파일로 돌아와서 BEGIN_MESSAGE_MAP()과 END_MESSAGE_MAP() 을 찾아야 한다.
    찾았다면 5번줄과 6번줄 처럼 메시지를 [1] [2]에서 선언한 메시지와 함수를 연결시켜 준다.
    반전된 곳의 ClassName은 알아서 고치자.
1
2
3
4
5
6
7
8
BEGIN_MESSAGE_MAP(CNetDebugMonitor4Dlg, CDialog)
 ON_WM_SYSCOMMAND()
 ON_WM_PAINT()
 ON_WM_QUERYDRAGICON()
 ON_MESSAGE(UM_MESSAGE1, &ClassName::OnUserMessage1)
 ON_MESSAGE(UM_MESSAGE2, &ClassName::OnUserMessage2) 
//}}AFX_MSG_MAP END_MESSAGE_MAP()


[4] 다음으로 선언한 함수를 구현한다.
    wParam: 주로 값을 넘긴다.
    lParam:  값 뿐만 아니라 포인터로 사용한다.

1
2
3
4
5
LRESULT ClassName::OnUserMessage1(UINT wParam, LONG lParam)
{
    //...
    return 0;
}


[5] 호출할 때는 위의 코드를 넣은 (ClassName-Instance)->SendMessage(UM_MESSAGE1, 0, 0); 이런식으로 호출한다.





+ Recent posts