I want to get the current mouse position of the window, and assign it to 2 variables x
and y
(co-ordinates relative to the window, not to the screen as a whole).
I'm using Win32 and C++.
And a quick bonus question: how would you go about hiding the cursor/unhiding it?
You get the cursor position by calling GetCursorPos
.
POINT p;
if (GetCursorPos(&p))
{
//cursor position now in p.x and p.y
}
This returns the cursor position relative to screen coordinates. Call ScreenToClient
to map to window coordinates.
if (ScreenToClient(hwnd, &p))
{
//p.x and p.y are now relative to hwnd's client area
}
You hide and show the cursor with ShowCursor
.
ShowCursor(FALSE);//hides the cursor
ShowCursor(TRUE);//shows it again
You must ensure that every call to hide the cursor is matched by one that shows it again.
My guess for downvote is, GetCursorPos retrieves screen coordinates while the question asked explicitly for window coordinates.
ScreenToClient
/MapWindowPoints
is missing from your answer.What happens if the hiding and showing calls are not matched? Does it leave the cursor hidden even after the windows/program is closed?
If you're working with OpenGL like I was when I found this, you might find GetClientRect(HWND, LPRECT) as useful as I found this when you are flipping the mouse y coord. Cheers