光标在屏幕上锁定时如何获得鼠标移动

光标在屏幕上锁定时如何获得鼠标移动

问题描述:

我有一个应用程序(游戏),我需要光标隐藏,因为玩家应该用鼠标控制一个实体。我还必须锁定光标(在mousemove事件处理程序中使用SetCursorPos设置屏幕位置的中间位置)。光标在屏幕上锁定时如何获得鼠标移动

跟踪鼠标移动是否存在可行且简单的解决方案?

现在我有一个拙劣的布尔值破解,它允许我在调用SetCursorPos方法后忽略下一个事件处理函数。但我不喜欢它,它不能正常工作 - 鼠标移动不准确。

唉,我不能在这个项目中使用DirectInput。

我用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; 
}