我覆盖了我处理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位置。
如何在鼠标滚轮事件中获得鼠标的相对位置?
答案 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.