【问题标题】:Why GET_X_LPARAM does return an absolute position on mouse wheel?为什么 GET_X_LPARAM 确实返回鼠标滚轮上的绝对位置?
【发布时间】:2015-04-28 09:34:49
【问题描述】:

我覆盖了我处理 Windows 消息的 Window 的 WndProc 方法。

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);

为了在我捕获左键按下事件(WM_LBUTTONDOWN)时获取鼠标的位置,我使用以下代码:

auto x = GET_X_LPARAM(lParam);
auto y = GET_Y_LPARAM(lParam);

这很好用。我能够在我的窗口上获得鼠标的相对位置。但是当我捕捉到鼠标滚轮事件(WM_MOUSEWHEEL)时,我遇到了问题。在这种情况下,上面的宏似乎返回了鼠标在我的屏幕中的 abousulte 位置。

即使在鼠标滚轮事件中,如何获取鼠标的相对位置?

【问题讨论】:

    标签: c++ events mousewheel mouse-position


    【解决方案1】:

    WM_MOUSEWHEEL 确实在lParam 中携带基于屏幕的坐标。这是设计使然。

    要转换成基于客户端的坐标,可以使用ScreenToClient()

    POINT pt;
    pt.x = GET_X_LPARAM(lParam);
    pt.y = GET_Y_LPARAM(lParam);
    ScreenToClient(hwnd, &pt);
    // 'pt' now contains client-based coordinates.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多