2013-01-01 67 views
1

我使用winapi的原始輸入設備進行鼠標輸入,看起來我沒有在我的RAWMOUSE結構中獲得正確的值。原始輸入設備RAWMOUSE使用

當我拿到RAWMOUSE結構,我得到lLastXlLastY如我期望的值,但由於某些原因,ulRawButtons是不斷0 MSDN文檔說,ulRawButtons是「的原鼠標按鈕的狀態「所以我認爲這應該改變,當我按下鼠標按鈕。

這是我創建與原始輸入裝置的代碼(I移除錯誤檢查的可讀性):

void handleRawInput(HWND window, UINT, WPARAM wParam, LPARAM lParam) 
{ 
    RAWINPUT input; 
    UINT szData = sizeof(input), szHeader = sizeof(RAWINPUTHEADER); 
    HRAWINPUT handle = reinterpret_cast<HRAWINPUT>(lParam); 

    GetRawInputData(handle, RID_INPUT, &input, &szData, szHeader); 
    if (input.header.dwType == RIM_TYPEMOUSE) 
    { 
     // Here input.data.mouse.ulRawButtons is 0 at all times. 
    } 
} 

我:

RAWINPUTDEVICE rid; 
rid.usUsagePage = 0x01; 
rid.usUsage  = 0x02; 
rid.dwFlags  = RIDEV_INPUTSINK; 
rid.hwndTarget = myWindowHandle; 
RegisterRawInputDevices(&rid, 1, sizeof(rid)); 

WM_INPUT消息我打電話後使用mingw32(4.7)和我已經定義WIN32_LEAN_AND_MEANWINVER = 0x0501WIN32_WINNT = 0x0501

任何想法,爲什麼我沒有得到ulRawButtons的正確值?

+0

該值直接來自設備驅動程序。也許你有一個古怪的依賴於使用usButtonFlags的Windows。 –

+0

來自Microsoft MSDN網站的演示代碼,主題爲「使用原始輸入」,網址爲https://msdn.microsoft.com/en-us/library/ms645546(v=vs.85).aspx提供了兩個鍵盤的示例和鼠標,作爲@Sean Cline在他的回答中提到,我在Win32窗口應用程序中使用這個演示代碼顯示'data.mouse.ulButtons'和'data.mouse.usButtonFlags'都會隨着我點擊鼠標墊按鈕而改變值然而,我的筆記本電腦'data.mouse.ulRawButtons'似乎總是爲零。 –

回答

2

Windows使用鼠標驅動程序通過MOUSE_INPUT_DATA結構告訴它的結構填充了RAWMOUSE結構。

你會發現MSDN pageMOUSE_INPUT_DATA狀態如下:

RawButtons

指定鼠標按鈕的原始狀態。 Win32子系統不使用此成員。

什麼MSDN頁面不說的是,不僅Win32的不使用RawButtons/ulRawButtons但鼠標驅動程序在發貨不填充它們。所以,除非你有第三方廠商的鼠標驅動程序,否則你永遠不會得到這個字段集。

我認爲你要使用的是:input.data.mouse.usButtonFlags爲鼠標點擊和input.data.mouse.usButtonData爲滾輪三角洲。

+0

感謝您的回覆,我的印象是usButtonFlags顯示了差異,ulRawButton顯示了當前狀態。 –