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 |