为什么 GET_X_LPARAM 确实返回鼠标滚轮上的绝对位置?

Nic*_*ick 2 c++ events mousewheel mouse-position

我重写了WndProc处理 Windows 消息的窗口的方法。

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
Run Code Online (Sandbox Code Playgroud)

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

auto x = GET_X_LPARAM(lParam);
auto y = GET_Y_LPARAM(lParam);
Run Code Online (Sandbox Code Playgroud)

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

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

Fré*_*idi 5

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.
Run Code Online (Sandbox Code Playgroud)