MFC

MFC에 고유의 명령(Command) 메시지 특징

디버그정 2008. 9. 2. 20:30

 

 

 사용자가 메뉴, 툴바, 액셀레이터 등의 항목을 선택했을 때 응용 프로그램 윈도우에게 보내는 메시지를 "명령 메시지"라고 합니다.  명령 메시지는 메뉴, 툴바, 액셀러레이터와 같은 사용자 인터페이스에서 발생되는 WM_COMMAND 메시지를 말합니다. 명령 메시지는 윈도우뿐만 아니라 도큐먼트, 도큐먼트 템플릿, , 다른 애플리케이션 객체들에 의해 발생될 수 있습니다. 예를 들어  MFC 도큐먼트/뷰 구조를 사용하는 응용 프로그램에서 도큐먼트는 윈도우가 아님에도 불구하고 파일 저장 명령을 처리하도록 되어 있습니다. 그러나 앞에서 메시지를 받을 수 있는 대상은 윈도우 뿐이라 언급했던 것을 기억하실 것입니다. 사실 WM_COMMAND 메시지를 받을 수 있는 대상은 윈도우이지만 MFC에서는 WM_COMMAND 메시지를 좀더 일반적인 명령으로 변환해 다른 객체에서도 이 메시지를 처리할 수 있도록 확장했습니다

 바로 이것이 MFC 메시지 메커니즘의 특징으로 윈도우뿐만 아니라 어떤 종류의 객체라도 메뉴 명령을 처리할 수 있는 방법을 제공합니다.


==================>

MFC에서 WM_COMMAND 메시지 처리의 일반구조는 후킹을 통해 메시지를 특정 객체로 보내는 방식이다... 특정 객체에서 핸들러가 없는 경우 연속해서 다른 객체로 보내는 방식이다. 그러므로 윈도우가 아니더라도 CCmdTarget 클래스를 상속하기만 하면 커맨드 메시지를 처리할 수 있는 구조가 된다. 물론 Command 메시지 처리 루틴에서 객체가 연결되는 곳이 있어야 한다. 참고로 내부를 들여다보면 아무런 핸들러를 가지지 않는 경우 종착지점은 처음에 윈도우 등록시 프로시져로 등록한 DefWinProc이다.