消息映射 (ATL)

消息映射将处理程序函数与特定的消息、命令或通知相关联。 通过使用 ATL 的消息映射宏,可以为窗口指定消息映射。 CWindowImplCDialogImplCContainedWindowT 中的窗口过程将窗口的消息定向到其消息映射。

消息处理程序函数接受类型 BOOL& 的其他参数。 此参数指示消息是否已处理,并且默认设置为 TRUE。 然后,处理程序函数可以将参数设置为 FALSE,以指示它未处理消息。 在这种情况下,ATL 将继续在消息映射中进一步查找处理程序函数。 通过将此参数设置为 FALSE,可以首先对消息执行一些操作,然后允许默认处理或其他处理程序函数完成处理消息。

链接的消息映射

ATL 还允许链接消息映射,该映射将消息处理定向到另一类中定义的消息映射。 例如,可以在单独的类中实现通用消息处理,以便为链接到该类的所有窗口提供统一行为。 可以链接基类或类的数据成员。

ATL 还支持动态链接,这样就可以在运行时链接到另一个对象的消息映射。 若要实现动态链接,必须从 CDynamicChain 派生类。 然后在消息映射中声明 CHAIN_MSG_MAP_DYNAMIC 宏。 CHAIN_MSG_MAP_DYNAMIC 需要一个唯一的数字,用于标识要链接的对象和消息映射。 必须通过调用 CDynamicChain::SetChainEntry 来定义此唯一值。

可以链接到声明消息映射的任何类,前提是该类派生自 CMessageMapCMessageMap 允许对象向其他对象公开其消息映射。 请注意,CWindowImpl 派生自 CMessageMap

备用消息映射

最后,ATL 支持使用 ALT_MSG_MAP 宏声明的备用消息映射。 每个备用消息映射都由传递给 ALT_MSG_MAP 的唯一数字进行标识。 使用备用消息映射,可以在一个映射中处理多个窗口的消息。 请注意,默认情况下, CWindowImpl 不使用备用消息映射。 若要添加此支持,请重写 CWindowImpl 派生的类中的 WindowProc 方法,并使用消息映射标识符调用 ProcessWindowMessage

另请参阅

实现窗口