2015-04-28 23 views
2

我重写了窗口中处理Windows消息的WndProc方法。为什么GET_X_LPARAM确实会在鼠标滚轮上返回绝对位置?

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),我遇到了问题。在这种情况下,上面的宏看起来像是在我的屏幕中返回鼠标的绝对位置。

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

回答

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. 
相关问题