2014-02-18 67 views
0

我有一個應用程序(遊戲),我需要光標隱藏,因爲玩家應該用鼠標控制一個實體。我還必須鎖定光標(在mousemove事件處理程序中使用SetCursorPos設置屏幕位置的中間位置)。光標在屏幕上鎖定時如何獲得鼠標移動

跟蹤鼠標移動是否存在可行且簡單的解決方案?

現在我有一個拙劣的布爾值破解,它允許我在調用SetCursorPos方法後忽略下一個事件處理函數。但我不喜歡它,它不能正常工作 - 鼠標移動不準確。

唉,我不能在這個項目中使用DirectInput。

回答

0

我用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; 
} 
相關問題