티스토리 뷰
MFC 명령라우팅
종류 |
설명 |
메시지맵 매크로 |
윈도우 메시지 |
윈도우 생성, 종료, 마우스, 키보드 등 다양한 원인에 의해 발생 |
ON_WM_***() |
명령메시지 |
메뉴, 툴바, 가속기 등에 의해 발생 |
ON_COMMAND(ID, 함수) |
명령 갱신 메시지 |
메뉴, 툴바, 상태바 등이 상태를 갱신할 필요가 있을때 발생 (MFC에서만 사용하는 고유 메시지) |
ON_UPDTAE_COMMAND_UI(ID, 함수) |
통지 메시지 |
컨트롤(자식 윈도우)이 부모 윈도우에게 보내는 메시지 |
ON_****(ID, 함수) |
윈도우 메시지, 통지 메시지는 특정 윈도우만 받아서 처리할 수 있다. 예로 클라이언트 영역에서 마우스를 클릭하면 뷰 객체가 해당 메시지를 받아서 처리한다. 반면, 명령 메시지와 명령 갱신 메시지는 일반적으로 메인 윈도우(프레임 윈도우 객체)가 처음으로 받지만 뷰 객체나 도큐먼트 객체는 물론이고 심지어 응용 프로그램 객체도 이를 받아서 처리할 수 있다.
명령 메시지, 명령 갱신 메시지를 여러 객체에서 처리 할 수 있도록 전달해주는데 이를 명령 라우팅 이라 부른다.
만약, 동일한 메시지에 대한 핸들러가 2개 이상 있다면 명령 라우팅 순서 상 앞쪽에 있는것만 실행된다.
전달 순서>
1. 활성 뷰
2. 활성 도큐먼트
3. 도큐먼트 템플릿
4. 프레임 윈도우
5. 응용 프로그램 객체
6. ::DefWindowProc
명령 메시지, 명령 갱신 메시지는 프레임윈도우가 먼저 받고 1번 부터 순서대로 받게 된다.