메시지 맵 매크로(MFC)

메시지 맵을 지원하기 위해 MFC는 다음 매크로를 제공합니다.

메시지 맵 선언 및 경계 매크로

이름 설명
DECLARE_MESSAGE_MAP 메시지 맵이 클래스에서 메시지를 함수에 매핑하는 데 사용됨을 선언합니다(클래스 선언에서 사용해야 합니다).
BEGIN_MESSAGE_MAP 메시지 맵의 정의를 시작합니다(클래스 구현에서 사용해야 합니다).
BEGIN_TEMPLATE_MESSAGE_MAP 단일 템플릿 인수를 포함하는 클래스 형식에서 메시지 맵의 정의를 시작합니다.
END_MESSAGE_MAP 메시지 맵의 정의를 종료합니다(클래스 구현에서 사용해야 합니다).

메시지 매핑 매크로

이름 설명
ON_COMMAND 지정된 명령 메시지를 처리할 함수를 나타냅니다.
ON_COMMAND_EX 지정된 명령 메시지를 처리할 함수를 나타냅니다.
ON_CONTROL 지정된 컨트롤 알림 메시지를 처리할 함수를 나타냅니다.
ON_MESSAGE 사용자 정의 메시지를 처리할 함수를 나타냅니다.
ON_OLECMD DocObject 또는 해당 컨테이너의 메뉴 명령을 처리할 함수를 나타냅니다.
ON_REGISTERED_MESSAGE 등록된 사용자 정의 메시지를 처리할 함수를 나타냅니다.
ON_REGISTERED_THREAD_MESSAGE 클래스가 있을 때 등록된 사용자 정의 메시지를 처리할 함수를 CWinThread 나타냅니다.
ON_THREAD_MESSAGE 클래스가 있을 때 사용자 정의 메시지를 처리할 함수를 CWinThread 나타냅니다.
ON_UPDATE_COMMAND_UI 지정된 사용자 인터페이스 업데이트 명령 메시지를 처리할 함수를 나타냅니다.

메시지 맵 범위 매크로

이름 설명
ON_COMMAND_RANGE 매크로에 대한 처음 두 매개 변수에 지정된 명령 ID의 범위를 처리할 함수를 나타냅니다.
ON_UPDATE_COMMAND_UI_RANGE 매크로에 대한 처음 두 매개 변수에 지정된 명령 ID의 범위를 처리할 업데이트 처리기를 나타냅니다.
ON_CONTROL_RANGE 두 번째 및 세 번째 매개 변수에 지정된 컨트롤 ID 범위에서 매크로로 알림을 처리할 함수를 나타냅니다. 첫 번째 매개 변수는 컨트롤 알림 메시지(예: BN_CLICKED.)입니다.

메시지 맵, 메시지 맵 선언 및 경계 매크로 및 메시지 매핑 매크로에 대한 자세한 내용은 메시지 지도메시지 처리 및 매핑 항목을 참조하세요. 메시지 맵 범위에 대한 자세한 내용은 메시지 맵 범위에 대한 처리기를 참조 하세요.

BEGIN_MESSAGE_MAP

메시지 맵의 정의를 시작합니다.

구문

BEGIN_MESSAGE_MAP( theClass, baseClass )

매개 변수

theClass
메시지 맵이 있는 클래스의 이름을 지정합니다.

baseClass
기본 클래스 theClass의 이름을 지정합니다.

설명

클래스의 멤버 함수를 정의하는 구현(.cpp) 파일에서 매크로를 BEGIN_MESSAGE_MAP 사용하여 메시지 맵을 시작한 다음 각 메시지 처리기 함수에 대한 매크로 항목을 추가하고 매크로를 사용하여 메시지 맵을 END_MESSAGE_MAP 완료합니다.

메시지 맵에 대한 자세한 내용은 메시지 지도 참조하세요.

예시

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
   ON_WM_CREATE()
END_MESSAGE_MAP()

요구 사항

헤더afxwin.h:

BEGIN_TEMPLATE_MESSAGE_MAP

단일 템플릿 인수를 포함하는 클래스 형식에서 메시지 맵의 정의를 시작합니다.

구문

BEGIN_TEMPLATE_MESSAGE_MAP( theClass, type_name, baseClass )

매개 변수

theClass
메시지 맵이 있는 클래스의 이름을 지정합니다.

type_name
클래스에 지정된 템플릿 매개 변수의 이름입니다.

baseClass
기본 클래스 theClass의 이름을 지정합니다.

설명

이 매크로는 매크로와 BEGIN_MESSAGE_MAP 유사합니다. 그러나 이 매크로는 단일 템플릿 인수를 포함하는 클래스를 위한 것입니다.

클래스의 메서드 구현 섹션에서 매크로를 사용하여 메시지 맵을 BEGIN_TEMPLATE_MESSAGE_MAP 시작한 다음, 표준 메시지 맵과 마찬가지로 각 메시지 처리기 메서드에 대한 매크로 항목을 추가합니다. 매크로와 BEGIN_MESSAGE_MAP 마찬가지로 매크로를 사용하여 템플릿 메시지 맵을 완료합니다 END_MESSAGE_MAP .

템플릿 클래스에 대한 메시지 맵 구현에 대한 자세한 내용은 방법: 템플릿 클래스에 대한 메시지 맵 만들기를 참조 하세요.

요구 사항

헤더afxwin.h:

DECLARE_MESSAGE_MAP

클래스가 메시지 맵을 정의한다고 선언합니다. 프로그램의 각 CCmdTarget파생 클래스는 메시지를 처리할 메시지 맵을 제공해야 합니다.

구문

DECLARE_MESSAGE_MAP( )

설명

DECLARE_MESSAGE_MAP 클래스 선언의 끝에 있는 매크로를 사용합니다. 그런 다음 클래스의 멤버 함수를 정의하는 .cpp 파일에서 매크로, 각 메시지 처리기 함수에 대한 매크로 항목 및 매크로를 END_MESSAGE_MAP 사용합니다BEGIN_MESSAGE_MAP.

참고 항목

이후에 DECLARE_MESSAGE_MAP멤버를 선언하는 경우 새 액세스 형식(publicprivate또는protected)을 지정해야 합니다.

메시지 맵 및 DECLARE_MESSAGE_MAP 매크로에 대한 자세한 내용은 메시지 처리 및 매핑 항목을 참조 하세요.

예시

class CMainFrame : public CMDIFrameWnd
{
   DECLARE_MESSAGE_MAP()

   // Remainder of class declaration omitted.

요구 사항

헤더afxwin.h:

END_MESSAGE_MAP

메시지 맵의 정의를 종료합니다.

구문

END_MESSAGE_MAP( )

설명

메시지 맵 및 END_MESSAGE_MAP 매크로에 대한 자세한 내용은 메시지 처리 및 매핑 항목을 참조 하세요.

요구 사항

헤더afxwin.h:

ON_COMMAND

이 매크로는 명령 메시지를 멤버 함수에 매핑합니다.

구문

ON_COMMAND( commandId, memberFxn )

매개 변수

commandId
명령 ID입니다.

memberFxn
명령이 매핑되는 메시지-처리기 함수의 이름입니다.

설명

메뉴 항목 또는 도구 모음 단추와 같은 명령 사용자 인터페이스 개체에서 명령 메시지를 처리할 함수를 나타냅니다.

명령 대상 개체가 지정된 ID ON_COMMAND 를 가진 Windows WM_COMMAND 메시지를 받으면 멤버 함수 memberFxn 를 호출하여 메시지를 처리합니다.

단일 명령을 멤버 함수에 매핑하는 데 사용합니다 ON_COMMAND . 명령 ID 범위를 하나의 멤버 함수에 매핑하는 데 사용합니다 ON_COMMAND_RANGE . 하나의 메시지 맵 항목만 지정된 명령 ID와 일치할 수 있습니다. 즉, 명령을 둘 이상의 처리기에 매핑할 수 없습니다. 자세한 내용 및 예제는 메시지 처리 및 매핑 항목을 참조 하세요.

예시

BEGIN_MESSAGE_MAP(CMFCListViewDoc, CDocument)
   ON_COMMAND(ID_MYCOMMAND, &CMFCListViewDoc::OnMycommand)
END_MESSAGE_MAP()

요구 사항

헤더afxmsg_.h:

ON_COMMAND_EX

확장 명령 처리기 멤버 함수입니다.

구문

ON_COMMAND_EX(commandId, memberFxn);

매개 변수

commandId
명령 ID입니다.

memberFxn
명령이 매핑되는 메시지-처리기 함수의 이름입니다.

설명

확장된 형태의 명령 메시지 처리기를 고급 용도로 사용할 수 있습니다. 매크로 ON_COMMAND_EX 는 이러한 메시지 처리기에 사용되며 기능의 상위 집합을 ON_COMMAND 제공합니다. 확장 명령 처리기 멤버 함수는 명령 IDBOOLUINT 포함하는 단일 매개 변수를 사용하고 . 반환 값은 명령이 처리되었음을 나타내야 합니다 TRUE . 그렇지 않으면 라우팅이 다른 명령 대상 개체로 계속됩니다.

자세한 내용은 기술 참고 사항 [TN006: 메시지 지도]tm006-message-maps.md)을 참조하세요.

요구 사항

헤더 파일: afxmsg_.h

ON_CONTROL

사용자 지정 제어 알림 메시지를 처리할 함수를 나타냅니다.

구문

ON_CONTROL( wNotifyCode, commandId, memberFxn )

매개 변수

wNotifyCode
컨트롤의 알림 코드입니다.

commandId
명령 ID입니다.

memberFxn
명령이 매핑되는 메시지-처리기 함수의 이름입니다.

설명

컨트롤 알림 메시지는 컨트롤에서 부모 창으로 전송되는 메시지입니다.

메시지 처리기 함수에 매핑해야 하는 모든 컨트롤 알림 메시지에 대해 메시지 맵에 정확히 하나의 ON_CONTROL 매크로 문이 있어야 합니다.

자세한 내용 및 예제는 메시지 처리 및 매핑 항목을 참조 하세요.

요구 사항

헤더afxmsg_.h:

ON_MESSAGE

사용자 정의 메시지를 처리할 함수를 나타냅니다.

구문

ON_MESSAGE( message, memberFxn )

매개 변수

message
메시지 ID입니다.

memberFxn
메시지가 매핑되는 메시지 처리기 함수의 이름입니다.

함수의 형식은 .이어야 afx_msg LRESULT (CWnd::*)(WPARAM, LPARAM)합니다.

설명

사용자 정의 메시지는 표준 Windows WM_MESSAGE 메시지가 아닌 모든 메시지입니다. 메시지 ID를 선택할 때는 0x7FFF(0x0400) 범위 내의 WM_USER 값을 사용하거나 WM_APP (0x8000) 0xBFFF 합니다. 메시지 ID에 대한 자세한 내용은 다음을 참조하세요 WM_APP.

메시지 처리기 함수에 매핑해야 하는 모든 사용자 정의 메시지에 대해 메시지 맵에 정확히 하나의 ON_MESSAGE 매크로 문이 있어야 합니다.

참고 항목

사용자 정의 메시지 ON_MESSAGE 외에도 덜 일반적인 Windows 메시지를 처리합니다. 자세한 내용은 메시지 지도 참조하세요.

자세한 내용 및 예제는 메시지 처리 및 매핑 토픽 및사용자 정의 처리기를 참조하세요.

예시

#define WM_MYMESSAGE (WM_USER + 100)

BEGIN_MESSAGE_MAP(CMyWnd2, CWnd)
   ON_MESSAGE(WM_MYMESSAGE, OnMyMessage)
END_MESSAGE_MAP()

// inside the class declaration
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);

LRESULT CMyWnd2::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
   UNREFERENCED_PARAMETER(wParam);
   UNREFERENCED_PARAMETER(lParam);

   // Handle message here.

   return 0;
}

요구 사항

헤더afxmsg_.h:

ON_OLECMD

명령 디스패치 인터페이스 IOleCommandTarget를 통해 명령을 라우팅합니다.

구문

ON_OLECMD( pguid, olecmdid, commandId )

매개 변수

pguid
명령이 속한 명령 그룹의 식별자입니다. 표준 그룹에 사용합니다 NULL .

olecmdid
OLE 명령의 식별자입니다.

commandId
명령을 실행하는 리소스 또는 개체의 메뉴 ID, 도구 모음 ID, 단추 ID 또는 기타 ID입니다.

설명

IOleCommandTarget 를 사용하면 컨테이너가 DocObject의 사용자 인터페이스에서 시작된 명령을 수신할 수 있으며, 컨테이너에서 동일한 명령(예: 파일 메뉴의 새로 만들기, 열기, 저장 및 인쇄, 편집 메뉴의 복사, 붙여넣기, 실행 취소 등)을 DocObject에 보낼 수 있습니다.

IOleCommandTarget 는 OLE Automation의 IDispatch.보다 간단합니다. IOleCommandTarget 는 인수가 거의 없는 표준 명령 집합에 전적으로 의존하며 형식 정보가 관련되지 않습니다(명령 인수의 경우 형식 안전성도 감소됨). 인수 COleServerDoc::OnExecOleCmd를 사용하여 명령을 디스패치해야 하는 경우 .

IOleCommandTarget 표준 메뉴 명령은 다음 매크로에서 MFC에 의해 구현되었습니다.

ON_OLECMD_CLEARSELECTION( )

지우기 편집 명령을 디스패치합니다. 다음과 같이 구현됩니다.

ON_OLECMD(NULL, OLECMDID_CLEARSELECTION, ID_EDIT_CLEAR)

ON_OLECMD_COPY( )

복사 편집 명령을 디스패치합니다. 다음과 같이 구현됩니다.

ON_OLECMD(NULL, OLECMDID_COPY, ID_EDIT_COPY)

ON_OLECMD_CUT( )

잘라내기 편집 명령을 디스패치합니다. 다음과 같이 구현됩니다.

ON_OLECMD(NULL, OLECMDID_CUT, ID_EDIT_CUT)

ON_OLECMD_NEW( )

새 파일 명령을 디스패치합니다. 다음과 같이 구현됩니다.

ON_OLECMD(NULL, OLECMDID_NEW, ID_FILE_NEW)

ON_OLECMD_OPEN( )

파일 열기 명령을 디스패치합니다. 다음과 같이 구현됩니다.

ON_OLECMD(NULL, OLECMDID_OPEN, ID_FILE_OPEN)

ON_OLECMD_PAGESETUP( )

파일 페이지 설치 명령을 디스패치합니다. 다음과 같이 구현됩니다.

ON_OLECMD(NULL, OLECMDID_PAGESETUP, ID_FILE_PAGE_SETUP)

ON_OLECMD_PASTE( )

붙여넣기 편집 명령을 디스패치합니다. 다음과 같이 구현됩니다.

ON_OLECMD(NULL, OLECMDID_PASTE, ID_EDIT_PASTE)

ON_OLECMD_PASTESPECIAL( )

붙여넣기 편집 특수 명령을 디스패치합니다. 다음과 같이 구현됩니다.

ON_OLECMD(NULL, OLECMDID_PASTESPECIAL, ID_EDIT_PASTE_SPECIAL)

ON_OLECMD_PRINT( )

파일 인쇄 명령을 디스패치합니다. 다음과 같이 구현됩니다.

ON_OLECMD(NULL, OLECMDID_PRINT, ID_FILE_PRINT)

ON_OLECMD_PRINTPREVIEW( )

파일 인쇄 미리 보기 명령을 디스패치합니다. 다음과 같이 구현됩니다.

ON_OLECMD(NULL, OLECMDID_PRINTPREVIEW, ID_FILE_PRINT_PREVIEW)

ON_OLECMD_REDO( )

편집 다시 실행 명령을 디스패치합니다. 다음과 같이 구현됩니다.

ON_OLECMD(NULL, OLECMDID_REDO, ID_EDIT_REDO)

ON_OLECMD_SAVE( )

파일 저장 명령을 디스패치합니다. 다음과 같이 구현됩니다.

ON_OLECMD(NULL, OLECMDID_SAVE, ID_FILE_SAVE)

ON_OLECMD_SAVE_AS( )

파일 다른 이름으로 저장 명령을 디스패치합니다. 다음과 같이 구현됩니다.

ON_OLECMD(NULL, OLECMDID_SAVEAS, ID_FILE_SAVE_AS)

ON_OLECMD_SAVE_COPY_AS( )

파일 다른 이름으로 복사 저장 명령을 디스패치합니다. 다음과 같이 구현됩니다.

ON_OLECMD(NULL, OLECMDID_SAVECOPYAS, ID_FILE_SAVE_COPY_AS)

ON_OLECMD_SELECTALL( )

모두 선택 편집 명령을 디스패치합니다. 다음과 같이 구현됩니다.

ON_OLECMD(NULL, OLECMDID_SELECTALL, ID_EDIT_SELECT_ALL)

ON_OLECMD_UNDO( )

실행 취소 편집 명령을 디스패치합니다. 다음과 같이 구현됩니다.

ON_OLECMD(NULL, OLECMDID_UNDO, ID_EDIT_UNDO)

요구 사항

헤더afxdocob.h:

ON_REGISTERED_MESSAGE

Windows RegisterWindowMessage 함수는 시스템 전체에서 고유하도록 보장되는 새 창 메시지를 정의하는 데 사용됩니다.

구문

ON_REGISTERED_MESSAGE( nMessageVariable, memberFxn )

매개 변수

nMessageVariable
등록된 창 메시지 ID 변수입니다.

memberFxn
메시지가 매핑되는 메시지 처리기 함수의 이름입니다.

설명

이 매크로는 등록된 메시지를 처리할 함수를 나타냅니다.

자세한 내용 및 예제는 메시지 처리 및 매핑 항목을 참조 하세요.

예시

static UINT NEAR WM_FIND = RegisterWindowMessage(_T("COMMDLG_FIND"));

BEGIN_MESSAGE_MAP(CMyWnd3, CWnd)
   ON_REGISTERED_MESSAGE(WM_FIND, OnFind)
END_MESSAGE_MAP()

요구 사항

헤더afxmsg_.h:

ON_REGISTERED_THREAD_MESSAGE

Windows RegisterWindowMessage 함수에 의해 등록된 메시지를 처리할 함수를 나타냅니다.

구문

ON_REGISTERED_THREAD_MESSAGE(nMessageVariable, memberFxn )

매개 변수

nMessageVariable
등록된 창 메시지 ID 변수입니다.

memberFxn
메시지가 매핑되는 -message-handler 함수의 이름 CWinThread입니다.

설명

RegisterWindowMessage 는 시스템 전체에서 고유하도록 보장되는 새 창 메시지를 정의하는 데 사용됩니다. ON_REGISTERED_THREAD_MESSAGE는 클래스가 있는 경우 CWinThread 대신 ON_REGISTERED_MESSAGE 사용해야 합니다.

요구 사항

헤더afxmsg_.h:

ON_THREAD_MESSAGE

사용자 정의 메시지를 처리할 함수를 나타냅니다.

구문

ON_THREAD_MESSAGE( message, memberFxn )

매개 변수

message
메시지 ID입니다.

memberFxn
메시지가 매핑되는 -message-handler 함수의 이름 CWinThread입니다.

설명

ON_THREAD_MESSAGE는 클래스가 있는 경우 CWinThread 대신 ON_MESSAGE 사용해야 합니다. 사용자 정의 메시지는 표준 Windows WM_MESSAGE 메시지가 아닌 모든 메시지입니다. 메시지 처리기 함수에 매핑해야 하는 모든 사용자 정의 메시지에 대해 메시지 맵에 정확히 하나의 ON_THREAD_MESSAGE 매크로 문이 있어야 합니다.

요구 사항

헤더afxole.h:

ON_UPDATE_COMMAND_UI

이 매크로는 사용자 인터페이스 업데이트 명령 메시지를 처리할 함수를 나타냅니다.

구문

ON_UPDATE_COMMAND_UI( messageId, memberFxn )

매개 변수

messageId
메시지 ID입니다.

memberFxn
메시지가 매핑되는 메시지 처리기 함수의 이름입니다.

설명

메시지 처리기 함수에 매핑해야 하는 모든 사용자 인터페이스 업데이트 명령에 대해 메시지 맵에 정확히 하나의 ON_UPDATE_COMMAND_UI 매크로 문이 있어야 합니다.

자세한 내용 및 예제는 메시지 처리 및 매핑 항목을 참조 하세요.

요구 사항

헤더afxole.h:

ON_COMMAND_RANGE

이 매크로를 사용하여 명령 ID의 연속 범위를 단일 메시지 처리기 함수에 매핑합니다.

구문

ON_COMMAND_RANGE( id1, id2, memberFxn )

매개 변수

id1
연속된 명령 ID 범위의 시작 부분에 있는 명령 ID입니다.

id2
명령 ID의 연속 범위 끝에 있는 명령 ID입니다.

memberFxn
명령이 매핑되는 메시지 처리기 함수의 이름입니다.

설명

ID 범위는 .로 시작하고 id1id2입니다.

명령 ID 범위를 하나의 멤버 함수에 매핑하는 데 사용합니다 ON_COMMAND_RANGE . 단일 명령을 멤버 함수에 매핑하는 데 사용합니다 ON_COMMAND . 하나의 메시지 맵 항목만 지정된 명령 ID와 일치할 수 있습니다. 즉, 명령을 둘 이상의 처리기에 매핑할 수 없습니다. 메시지 범위 매핑에 대한 자세한 내용은 메시지 맵 범위에 대한 처리기를 참조 하세요.

메시지 맵 범위에 대한 자동 지원은 없으므로 매크로를 직접 배치해야 합니다.

예시

// The code fragment below shows how to use ON_COMMAND_RANGE macro
// to map a contiguous range of command IDs to a single message
// handler function (i.e. OnRangeCmds() in the sample below). In
// addition, it also shows how to use CheckMenuRadioItem() to check a
// selected menu item and makes it a radio item.

BEGIN_MESSAGE_MAP(CChildFrame, CMDIChildWnd)
   ON_COMMAND_RANGE(ID_COMMAND_RANGECMD1, ID_COMMAND_RANGECMD3, &CChildFrame::OnRangeCmds)
END_MESSAGE_MAP()

void CChildFrame::OnRangeCmds(UINT nID)
{
   CMenu* mmenu = AfxGetMainWnd()->GetMenu();
   CMenu* submenu = mmenu->GetSubMenu(5);
   submenu->CheckMenuRadioItem(ID_COMMAND_RANGECMD1, ID_COMMAND_RANGECMD3,
      nID, MF_BYCOMMAND);
}

요구 사항

헤더afxmsg_.h:

ON_UPDATE_COMMAND_UI_RANGE

명령 ID의 연속 범위를 단일 업데이트 메시지 처리기 함수로 지도.

구문

ON_UPDATE_COMMAND_UI_RANGE( id1, id2, memberFxn )

매개 변수

id1
연속된 명령 ID 범위의 시작 부분에 있는 명령 ID입니다.

id2
명령 ID의 연속 범위 끝에 있는 명령 ID입니다.

memberFxn
명령이 매핑되는 업데이트 메시지 처리기 함수의 이름입니다.

설명

업데이트 메시지 처리기는 명령과 연결된 메뉴 항목 및 도구 모음 단추의 상태를 업데이트합니다. ID 범위는 .로 시작하고 id1id2입니다.

메시지 맵 범위에 대한 자동 지원은 없으므로 매크로를 직접 배치해야 합니다.

요구 사항

헤더afxmsg_.h:

ON_CONTROL_RANGE

이 매크로를 사용하여 컨트롤 ID의 연속 범위를 지정된 Windows 알림 메시지의 단일 메시지 처리기 함수(예: .)에 BN_CLICKED매핑합니다.

구문

ON_CONTROL_RANGE( wNotifyCode, id1, id2, memberFxn )

매개 변수

wNotifyCode
처리기가 응답하는 알림 코드입니다.

id1
연속된 컨트롤 ID 범위의 시작 부분에 있는 명령 ID입니다.

id2
연속된 컨트롤 ID 범위의 끝에 있는 명령 ID입니다.

memberFxn
컨트롤이 매핑되는 메시지 처리기 함수의 이름입니다.

설명

ID 범위는 .로 시작하고 id1id2입니다. 매핑된 컨트롤에서 들어오는 지정된 알림에 대해 처리기가 호출됩니다.

메시지 맵 범위에 대한 자동 지원은 없으므로 매크로를 직접 배치해야 합니다.

컨트롤 ID 범위에 대한 처리기 함수를 구현하는 방법에 대한 자세한 내용은 메시지 맵 범위에 대한 처리기를 참조 하세요.

요구 사항

헤더afxmsg_.h:

참고 항목

ON_COMMAND
TN006: 메시지 맵
COleCmdUI 클래스
COleServerDoc::OnExecOleCmd
RegisterWindowMessage
사용자 정의 처리기
CCmdUI 클래스