我用GetRawInputData
代替鼠標屏幕座標。它像一個魅力。
在事件處理程序
LRESULT CALLBACK Application::StaticWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
...
case WM_INPUT:
{
UINT dwSize = 40;
static BYTE lpb[40];
GetRawInputData((HRAWINPUT)lParam, RID_INPUT,
lpb, &dwSize, sizeof(RAWINPUTHEADER));
RAWINPUT* raw = (RAWINPUT*)lpb;
if (raw->header.dwType == RIM_TYPEMOUSE)
{
int xPosRelative = raw->data.mouse.lLastX;
int yPosRelative = raw->data.mouse.lLastY;
GameState::Instance()->MoveCursor(xPosRelative, yPosRelative);
RECT rect;
//resetting cursor to stay in center
if(GetWindowRect(Application::Instance()->m_hWnd, &rect))
SetCursorPos((rect.right - rect.left)/2, (rect.bottom - rect.top)/2);
}
break;
}