본문으로 바로가기
MFC에서 영역을 지정하여 메세지를 받을 수가 있다.
예를 들어 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 );
등등이 사용가능하다.