Почему GET_X_LPARAM возвращает абсолютную позицию на колесе мыши?

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

Как я могу получить относительное положение мыши даже на событии колеса мыши?

2

Решение

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.
3

Другие решения


По вопросам рекламы [email protected]