在消息处理过程中,检查类自己的消息映射不是消息映射情景的末尾。发生,如果类 CMyView (从派生 CView) 没有消息的匹配项?
记住该 CView, CMyView基类,从 CWnd而后者派生。因此 CMyView是CView是CWnd。这些类中的每个都有自己的消息映射。该图形 “视图层次结构”下面演示类的分层关系,但请记住, CMyView 对象是具有所有三个类的特性的唯一对象。
视图层次结构
因此,如果消息在类 entity_CODECMyView 的消息映射不能匹配,该结构还搜索其直接基类消息映射。在消息映射的开始 BEGIN_MESSAGE_MAP 宏指定两个类名称作为其参数:
BEGIN_MESSAGE_MAP(CMyView, CFormView)
第一个参数命名消息映射所属的类。第二个参数提供连接此处直接基类 — CView ),因此该结构可以搜索其消息映射,也是。
在基类提供的消息处理程序将由派生类因此继承。这非常类似于常规的虚拟成员函数,而无需使所有处理程序虚成员函数。
如果处理程序在没有找到任何基类的消息映射,默认处理消息执行。如果消息为命令,框架路由到下一个命令目标。如果是标准 windows 消息,这些消息传递给适当的默认值窗口过程。
加速匹配的消息映射,在可能性的结构缓存最近与其再次接收相同的消息。这样的一个结果是该结构很有效地处理未经处理消息。消息映射比使用虚函数的实现来空间利用率。