JHB의 프로그래밍 삽질기

[MFC] MESSAGE MAP 본문

PROGRAMMING/Win/MFC

[MFC] MESSAGE MAP

roter 2010.12.14 14:20

MFC에서는 메세지와 함수를 연결시켜주는 메세지맵이라고 있다.

BEGIN_MESSAGE_MAP(자기클래스, 부모클래스)
 ...
 ...
END_MESSAGE_MAP()

으로 된다.
들어가는건 이것 저것 많다.

ON_NOTIFY
ex) ON_NOTIFY(NM_RCLICK, IDC_DB_TREE, OnNMRclickDbTree)

ON_MESSAGE
ex) ON_MESSAGE(WM_USER_COMMAND_COPY, OnUserMapCopy)

ON_COMMAND
ex) ON_COMMAND(ID_OK,OnOK)

등등...
그 외에 일정 범위 안에 있는 메세지를 처리하는 RANGE용도 메세지맵도 있는데 얘네들은 펑션들이 UINT nID를 인자로 가져야 한다.

ON_COMMAND_RANGE
ex) ON_COMMAND_RANGE(ida, idz, OnFunc) : ida부터 idz까지 사이의 모든 커맨드들의 메세지를 OnFunc에서 받음

이 외에도
ON_UPDATE_COMMAND_UI_RANGE
ON_CONTROL_RANGE
같은 녀석들도 있다.

예를 들면
메세지맵에 이렇게 써주고
ON_CONTROL_RANGE(BN_CLICKED, IDC_BUTTON_A, IDC_BUTTON_Z, OnButtonClicked)

함수는 이렇게 사용한다.
void CMainFrame::OnButton(UINT nID)
{
switch (nID)
{
case IDC_BUTTON_A:
:
break;
case IDC_BUTTON_B:
:
break;
case IDC_BUTTON_C:
:
break;
case IDC_BUTTONZ:
:
break;
}
}




회사 기존 프로그램에 버그가 있길래 뭐가 문제인가 하고 봤더니
RANGE로 설정한 메세지맵인데 범위가 다른 메세지까지 포함하도록 돼있었다..
따라서 Resource.h에 메세지 추가할땐 아무 생각 없이 제일 뒤에 추가하지 말 것-.-;;
Tag
공유하기 링크
0 Comments
댓글쓰기 폼