为什么GET_X_LPARAM会在鼠标滚轮上返回绝对位置?

时间:2015-04-28 09:34:50

标签: c++ events mousewheel mouse-position

我覆盖了我处理Windows消息的窗口的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位置。

如何在鼠标滚轮事件中获得鼠标的相对位置?

1 个答案:

答案 0 :(得分:3)

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.