Visual C++ ,MFC 를 사용한 프로그램시 나오는 내용입니다.

 

ON_COMMAND와 ON_MESSAGE 모두 macro로 코딩을 편하게 하기위해 사용한다고 볼수 있습니다.

 

차이점은 ON_COMMAND는 command id의 핸들러를 설정하는 함수로

사용법이 ON_COMMAND(id, memberFxn) 입니다.

즉  command id가 실행되면 memberfFxn 멤버 함수를 호출하라는 뜻입니다.

 

여기서 command id란 버튼의 ID 또는 menu의 ID입니다.

각 메뉴, 버튼에는 자신을 구분하기 위한 ID를 가지고 있고 사용자가 메뉴의 항목을 실행하거나 버튼을 누르면 WM_COMMAND 메세지가 발생하고 이 메세지의 인자중 하나가 선택한 항목의 ID입니다.

MFC 라이브러리는 WM_COMMAND의 인자로 전달된 ID를 ON_COMMAND macro에 설정된 값들과 비교해서 같은 값을 발견하면 그 ID의 멤버함수로 설정된 함수를 호출합니다.

 

ON_COMMAND가 ID의 멤버함수를 설정하는 것에 반해

ON_MESSAGE는 상용자 정의 메시지의 핸들러(멤버함수)를 설정하는 함수입니다.

 

WM_ 으로 시작하는 기본윈도우 메시지 이외에 사용자가 메시지를 정의할수 있습니다.

예를 들어 WMU_USERMSG 라고 사용자 정의 메세지를 정의하고

 

ON_MESSAGE(WMU_USERMSG, OnMyMsg)

 

이렇게 하면 WMU_MESSAGE가 발생하면 OnMyMsg 멤버함수가 호출됩니다.

 

다시 간단히 정리하면

ON_COMMAND 는 ID의 handler를

ON_MESSAGE는 사용자 정의 메시지의 handler를  멥핑시키는 macro입니다

Posted by 모과이IT
,