2015-04-28 2 views
2

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

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

ответ

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. 

 Смежные вопросы

  • Нет связанных вопросов^_^