2

I override the WndProc method of my Window where I handle Windows messages.

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);

In order to get the position of the mouse when I catch the left button down event (WM_LBUTTONDOWN) I use the following code:

auto x = GET_X_LPARAM(lParam);
auto y = GET_Y_LPARAM(lParam);

And this works well. I am able to get the relative position of the mouse on my window. But I have a problem when I catch the mouse wheel event (WM_MOUSEWHEEL). In this case it seems that the above macros return the abousulte position of the mouse within my screen.

How can I get the relative position of the mouse even on the mouse wheel event?

Nick
  • 10,309
  • 21
  • 97
  • 201

1 Answers1

5

WM_MOUSEWHEEL indeed carries screen-based coordinates in lParam. That's by design.

To convert into client-based coordinates, you can use ScreenToClient():

POINT pt;
pt.x = GET_X_LPARAM(lParam);
pt.y = GET_Y_LPARAM(lParam);
ScreenToClient(hwnd, &pt);
// 'pt' now contains client-based coordinates.
Frédéric Hamidi
  • 258,201
  • 41
  • 486
  • 479