【发布时间】:2012-05-17 13:57:23
【问题描述】:
WM_NOTIFY 的文档很容易找到,但是我找到了大量引用 WM_REFLECT_NOTIFY 的示例代码和文章,但我找不到任何文档。
什么是WM_REFLECT_NOTIFY,我在哪里可以找到它的文档以及此消息与WM_NOTIFY 有何不同?
示例参考:
【问题讨论】:
标签: winapi window-messages windows-controls
WM_NOTIFY 的文档很容易找到,但是我找到了大量引用 WM_REFLECT_NOTIFY 的示例代码和文章,但我找不到任何文档。
什么是WM_REFLECT_NOTIFY,我在哪里可以找到它的文档以及此消息与WM_NOTIFY 有何不同?
示例参考:
【问题讨论】:
标签: winapi window-messages windows-controls
WM_REFLECT_NOTIFY 被称为具有0x204E 的值,即0x2000 + WM_NOTIFY。消息反射的典型用途是将通知发送回其来源,以便所谓的子类控件可以自己处理通知。
因此,您可能缺少并查找文档的知识是控件以常规方式将WM_NOTIFY 发送到其父级。并且父级使用消息号0x2000 + 原始Msg 将具有相同消息参数的SendMessage 返回到控件。参数wParam,lParam的含义应该与原始消息相同(在您的情况下为WM_NOTIFY)。
常量0x2000 可能因框架而异,或者是控件和托管窗口之间的私有协议。
例如,MFC 和 ActiveX 控件反映 WM_NOTIFY 消息使其成为 OCM_NOTIFY 消息,其中 (olectl.h):
#define OCM_NOTIFY (OCM__BASE + WM_NOTIFY)
#define OCM__BASE (WM_USER+0x1c00)
最后是(winuser.h):
#define WM_USER 0x0400
也就是说,OCM_NOTIFY 是 0x204E,就像你的 WM_REFLECT_NOTIFY。来自此处的 MSDN 文档:Reflected Window Message IDs。
【讨论】: