When I handle WM_MOUSEMOVE in my window prodedure, HIWORD(lParam) and LOWORD(lParam) are both a little off. It's returning a point that is slightly to the left and slightly above where my cursor actually is...
What's really weird is that as I move the cursor closer to the top left of the client area of the window, the amout that the position I'm given differs from the actual cursor position gets smaller...
At first I thought it was because it was in screen coordinates and I needed to call ScreenToClient to convert it to client space coordinates, but this was not the case.
This is how I handle it, I don't change the coords it gives me anywhere.
case WM_MOUSEMOVE:
input->HandleInput (LOWORD(lParam), HIWORD(lParam));
break;