Я отменяю WndProc
метод моего окна, где я обрабатываю сообщения Windows.
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
). В этом случае кажется, что вышеупомянутые макросы возвращают положение мыши в моем экране.
Как я могу получить относительное положение мыши даже на событии колеса мыши?
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.