MFC에서 영역을 지정하여 메세지를 받을 수가 있다.
예를 들어 UI에서 Control ID에 대한 OnCommand 이벤트를 받는다고 하면 ON_COMMAND( id, memberFxn )
Head 파일에는
그런데 Message를 받는 루틴을 ID 마다 만들지 않고 영역을 지정하여 받은 수가 있다.
그것은 바로 ON_COMMAND_RANGE 와 같이 message-handler function뒤에 RANGE가 붙는다는 것이다.
영역을 정하여 메세지를 수신하는(Handlers for Message-Map Ranges) 를 사용하는 방법은 ON_COMMAND_RANGE( id1, id2, memberFxn ) 와 같이 사용한다.
id1~ id2 까지의 메세지를 수신하는 memberFxn를 만든다는 것이다. RANGE이벤트 핸들러에는 일반적인 핸들러와 다르게 Control ID를 파라메터로 넘기고 있나는 점에 유의하자
Message MAP선언
ON_COMMAND_RANGE( id1, id2, memberFxn )
ON_UPDATE_COMMAND_UI_RANGE( id1, id2, memberFxn )
ON_CONTROL_RANGE( wNotifyCode, id1, id2, memberFxn )
ON_EVENT_RANGE( theClass, idFirst, idLast, dispid, pfnHandler, vtsParams ) ON_PROPNOTIFY_RANGE( theClass, idFirst, idLast, dispid, pfnRequest, pfnChanged )
ON_NOTIFY_RANGE( wNotifyCode, id, idLast, memberFxn )
afx_msg void memberFxn( UINT id, NMHDR * pNotifyStruct, LRESULT * result );
등등이 사용가능하다.
예를 들어 UI에서 Control ID에 대한 OnCommand 이벤트를 받는다고 하면 ON_COMMAND( id, memberFxn )
Head 파일에는
//{{AFX_MSG(CMyDoc) afx_msg void memberFxn (); //}}AFX_MSG DECLARE_MESSAGE_MAP()CPP 파일에는
// example for ON_COMMAND BEGIN_MESSAGE_MAP( CMyDoc, CDocument ) //{{AFX_MSG_MAP( CMyDoc ) ON_COMMAND( ID_MYCMD, OnMyCommand ) // ... More entries to handle additional commands //}}AFX_MSG_MAP END_MESSAGE_MAP( ) ............ void memberFxn() { ...실행코드 }와 같이 사용하게됩니다.
그런데 Message를 받는 루틴을 ID 마다 만들지 않고 영역을 지정하여 받은 수가 있다.
그것은 바로 ON_COMMAND_RANGE 와 같이 message-handler function뒤에 RANGE가 붙는다는 것이다.
영역을 정하여 메세지를 수신하는(Handlers for Message-Map Ranges) 를 사용하는 방법은 ON_COMMAND_RANGE( id1, id2, memberFxn ) 와 같이 사용한다.
id1~ id2 까지의 메세지를 수신하는 memberFxn를 만든다는 것이다. RANGE이벤트 핸들러에는 일반적인 핸들러와 다르게 Control ID를 파라메터로 넘기고 있나는 점에 유의하자
Message MAP선언
// Generated message-map functions protected: //{{AFX_MSG(CMyApp) ... //}}AFX_MSG afx_msg void OnDoSomething( UINT nID ); DECLARE_MESSAGE_MAP()Message 핸들러
... BEGIN_MESSAGE_MAP(CMyApp, CWinApp) //{{AFX_MSG_MAP(CMyApp) ... //}}AFX_MSG_MAP ON_COMMAND_RANGE(ID_MYCMD_ONE, ID_MYCMD_TEN, OnDoSomething)//ID_MYCMD_ONE 에서 ID_MYCMD_TEN 까지의 메세지를 받아서 처리하도롯 END_MESSAGE_MAP( ) ... void OnDoSomething( UINT nID ) { Switch(nID) { case ID_MYCMD_ONE: //dosometing break; ................... case ID_MYCMD_TEN: //dosometing break; } }와 같이 사용 할 수 있다.
ON_COMMAND_RANGE( id1, id2, memberFxn )
ON_UPDATE_COMMAND_UI_RANGE( id1, id2, memberFxn )
ON_CONTROL_RANGE( wNotifyCode, id1, id2, memberFxn )
ON_EVENT_RANGE( theClass, idFirst, idLast, dispid, pfnHandler, vtsParams ) ON_PROPNOTIFY_RANGE( theClass, idFirst, idLast, dispid, pfnRequest, pfnChanged )
ON_NOTIFY_RANGE( wNotifyCode, id, idLast, memberFxn )
afx_msg void memberFxn( UINT id, NMHDR * pNotifyStruct, LRESULT * result );
등등이 사용가능하다.
'개발언어 > c++' 카테고리의 다른 글
소스 수정(편집)과 동시에 파일 적용(Visual Studio) apply code changes (0) | 2017.08.09 |
---|---|
ON_UPDATE_COMMAND_UI_RANGE(사용자 UI갱신매크로) (0) | 2017.08.09 |
Serialization: Serialize 가능한 클래스 만들기 (0) | 2017.08.05 |
fatal error C1001 (0) | 2017.01.02 |
afxv_w32.h(16) : fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include (0) | 2017.01.02 |