【问题标题】:WM_REFLECT_NOTIFY vs WM_NOTIFYWM_REFLECT_NOTIFY 与 WM_NOTIFY
【发布时间】:2012-05-17 13:57:23
【问题描述】:

WM_NOTIFY 的文档很容易找到,但是我找到了大量引用 WM_REFLECT_NOTIFY 的示例代码和文章,但我找不到任何文档。

什么是WM_REFLECT_NOTIFY,我在哪里可以找到它的文档以及此消息与WM_NOTIFY 有何不同?

示例参考:

【问题讨论】:

    标签: winapi window-messages windows-controls


    【解决方案1】:

    WM_REFLECT_NOTIFY 被称为具有0x204E 的值,即0x2000 + WM_NOTIFY。消息反射的典型用途是将通知发送回其来源,以便所谓的子类控件可以自己处理通知。

    因此,您可能缺少并查找文档的知识是控件以常规方式将WM_NOTIFY 发送到其父级。并且父级使用消息号0x2000 + 原始Msg 将具有相同消息参数的SendMessage 返回到控件。参数wParamlParam的含义应该与原始消息相同(在您的情况下为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_NOTIFY0x204E,就像你的 WM_REFLECT_NOTIFY。来自此处的 MSDN 文档:Reflected Window Message IDs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-31
      • 1970-01-01
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多