【问题标题】:WM_XBUTTONDOWN return value difference between ATL/MSDN documented value?WM_XBUTTONDOWN 返回值与 ATL/MSDN 记录值之间的差异?
【发布时间】:2016-12-14 00:02:29
【问题描述】:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms646245(v=vs.85).aspx,我摘录:

如果应用程序处理此消息,它应该返回 TRUE。为了 有关处理返回值的更多信息,请参阅备注 部分。

如果这很重要,WM_XBUTTONUPWM_XBUTTONDBLCLK 也是如此。

我希望我会找到MSG_WM_XBUTTONDOWN 来做这件事。但是,在来自 Chromium (https://src.chromium.org/svn/trunk/src/third_party/wtl/include/atlcrack.h) 的 atlcrack.h 中,我发现以下内容:

// void OnXButtonDown(int fwButton, int dwKeys, CPoint ptPos)
#define MSG_WM_XBUTTONDOWN(func) \
    if (uMsg == WM_XBUTTONDOWN) \
    { \
        SetMsgHandled(TRUE); \
        func(GET_XBUTTON_WPARAM(wParam), GET_KEYSTATE_WPARAM(wParam), _WTYPES_NS::CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \
        lResult = 0; \
        if(IsMsgHandled()) \
            return TRUE; \
    }

可以在MSG_WM_XBUTTONDOWNMSG_WM_XBUTTONDBLCLK 找到类似的作品。

在这个 sn-p 中,lResult = 0 行让我感到困惑。不应该是lResult = TRUE(根据MSDN)吗?

【问题讨论】:

  • 有一个return TRUE;声明。
  • 我明白了,但据我了解MSDN,返回值是指func(回调)而不是使用MSG_WM_XBUTTONDOWN的函数(即不是MSG_MAP) .如果您查看有关WM_MOUSEMOVE resp 的相应页面。 MSG_WM_MOUSEMOVE,您会看到类似的模式。 MSG_WM_MOUSEMOVE 也返回 TRUE,并且 MSDN 声明回调应返回 0(在 WM_MOUSEMOVE 的情况下,恕我直言,lResult = 0 正确反映)。
  • MSDN 没有记录 WTL。 WTL 不受官方支持。
  • 看起来像是来自其他鼠标消息破解程序的复制/粘贴错误。没那么重要,这条消息通常是用 PostMessage() 发布的,所以周围没有人看到错误的 LRESULT。除非有人在模拟输入,否则他们可能有点搞砸了。只需向 Chromium 项目提交错误。

标签: c++ winapi mouseevent atl wtl


【解决方案1】:

这是 WTL 中的一个错误,一直是 fixed

【讨论】:

    猜你喜欢
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    相关资源
    最近更新 更多