파생된 메시지 맵

메시지를 처리하는 동안 클래스의 고유한 메시지 맵을 검사 것은 메시지 맵 스토리의 끝이 아닙니다. 클래스 CMyView (파생)에 CView메시지에 일치하는 항목이 없으면 어떻게 되나요?

CView의 기본 클래스CMyView는 차례로 파생됩니다CWnd. 따라서 CMyViewa CView a입니다CWnd. 이러한 각 클래스에는 고유한 메시지 맵이 있습니다. 아래 그림에서는 클래스의 계층적 관계를 보여 주지만 개체는 세 클래스의 특징을 모두 가진 단일 개체임을 명심 CMyView 하세요.

Diagram showing the hierarchy of a view.
보기 계층 구조

클래스 CMyView의 메시지 맵에서 메시지를 일치시킬 수 없는 경우 프레임워크는 직접 기본 클래스의 메시지 맵도 검색합니다. 메시지 맵의 시작 부분에 있는 매크로는 BEGIN_MESSAGE_MAP 두 클래스 이름을 인수로 지정합니다.

BEGIN_MESSAGE_MAP(CMyView, CView)

첫 번째 인수는 메시지 맵이 속한 클래스의 이름을 지정합니다. 두 번째 인수는 프레임워크가 메시지 맵을 검색할 수 있도록 직접 기본 클래스(이 경우 CView)와의 연결을 제공합니다.

따라서 기본 클래스에 제공된 메시지 처리기는 파생 클래스에 의해 상속됩니다. 이는 모든 처리기 멤버 함수를 가상으로 만들 필요 없이 일반 가상 멤버 함수와 매우 유사합니다.

기본 클래스 메시지 맵에서 처리기를 찾을 수 없는 경우 메시지의 기본 처리가 수행됩니다. 메시지가 명령인 경우 프레임워크는 메시지를 다음 명령 대상으로 라우팅합니다. 표준 Windows 메시지인 경우 메시지는 적절한 기본 창 프로시저로 전달됩니다.

메시지 맵 일치 속도를 높이기 위해 프레임워크는 동일한 메시지를 다시 받을 가능성에 대해 최근 일치 항목을 캐시합니다. 이로 인한 결과 중 하나는 프레임워크가 처리되지 않은 메시지를 매우 효율적으로 처리한다는 것입니다. 또한 메시지 맵은 가상 함수를 사용하는 구현보다 공간 효율적입니다.

참고 항목

프레임워크가 메시지 맵을 검색하는 방법