ATL 支持使用
ALT_MSG_MAP
宏声明的备用消息映射。
每个备用消息映射由一个唯一编号标识,您将其传递给ALT_MSG_MAP
.
使用备用消息映射,您可以在一个映射中处理多个窗口的消息。
请注意,默认情况下,CWindowImpl
不使用备用消息映射。
要添加此支持,请覆盖WindowProc
您的CWindowImpl
派生类中的方法并ProcessWindowMessage
使用消息映射标识符进行调用。
当我查看 WTL 时,我会看到如下消息映射:
BEGIN_MSG_MAP(CCommandBarCtrlImpl)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
MESSAGE_HANDLER(WM_FORWARDMSG, OnForwardMsg)
...
ALT_MSG_MAP(1) // Parent window messages
MESSAGE_HANDLER(WM_INITMENUPOPUP, OnParentInitMenuPopup)
...
ALT_MSG_MAP(2) // MDI client window messages
// Use CMDICommandBarCtrl for MDI support
ALT_MSG_MAP(3) // Message hook messages
MESSAGE_HANDLER(WM_MOUSEMOVE, OnHookMouseMove)
...
END_MSG_MAP()
但是,我不明白:
他们是如何被调用的。(代码如何知道备用消息映射的存在?)
它们与默认消息映射有何不同。他们看起来都在为同一个窗口处理相同类型的消息......
为什么它们有用。(难道他们不都是同一个窗口吗?)
有人对备用消息映射的作用有更好的解释吗?
(为什么发明它们的动机会非常有帮助。)