WM_MOUSEMOVE GET_X_LPARAM和GET_Y_LPARAM捕获错误的坐标

WM_MOUSEMOVE GET_X_LPARAM AND GET_Y_LPARAM Catch wrong Coordinates

本文关键字:LPARAM GET 错误 坐标 MOUSEMOVE WM      更新时间:2023-10-16
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode == HC_ACTION)
{
if (wParam == WM_MOUSEMOVE)
{
cout << "X : " << GET_X_LPARAM(lParam) << " Y: " << GET_Y_LPARAM(lParam) << "n";
}
}
return CallNextHookEx(hMSHook, nCode, wParam, lParam);
}
int _tmain() {
HMODULE hInstance = GetModuleHandle(NULL);
hMSHook = SetWindowsHookEx(WH_MOUSE_LL, MouseProc, hInstance, NULL);
MSG Msg;
while (GetMessage(&Msg, NULL, 0, 0)) { DispatchMessage(&Msg); }
::ReleaseDC(0, dc);
return 0;
}

result = 总是返回错误的坐标,

示例 = X = -1844, Y = 79,

X = -1556 Y = 271,

X = -1028 Y = 91

每次发布时价值都在变化

有人可以帮助我吗?

MouseProclParam参数与WM_MOUSEMOVElParam参数不同。 这是一个MOUSEHOOKSTRUCT *.

因此,将MouseProc更改为:

LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode == HC_ACTION)
{
auto &ms = * (const MOUSEHOOKSTRUCT *) lParam;
if (wParam == WM_MOUSEMOVE)
{
cout << "X : " << ms.pt.x << " Y: " << ms.pt.y << "n";
}
}
return CallNextHookEx(hMSHook, nCode, wParam, lParam);
}