中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

RAWINPUT-如何獲取鼠標滾輪數據

小云
141
2023-09-26 07:54:37
欄目: 智能運維

要獲取鼠標滾輪數據,可以使用Windows的RAWINPUT API。以下是一種獲取鼠標滾輪數據的方法:

  1. 使用RegisterRawInputDevices函數注冊原始輸入設備。在注冊時,指定RAWINPUTDEVICE結構體的參數。
RAWINPUTDEVICE Rid[1];
Rid[0].usUsagePage = 0x01; // 鼠標
Rid[0].usUsage = 0x02;     // 鼠標中鍵和滾輪
Rid[0].dwFlags = RIDEV_INPUTSINK;
Rid[0].hwndTarget = hwnd;  // 接收消息的窗口句柄
if (!RegisterRawInputDevices(Rid, 1, sizeof(Rid[0]))) {
// 注冊失敗的處理
}
  1. 在窗口的消息處理函數中,處理WM_INPUT消息。當接收到WM_INPUT消息時,可以使用GetRawInputData函數獲取原始輸入數據。
case WM_INPUT:
{
UINT dataSize;
GetRawInputData((HRAWINPUT)lParam, RID_INPUT, NULL, &dataSize, sizeof(RAWINPUTHEADER));
char* buffer = new char[dataSize];
if (GetRawInputData((HRAWINPUT)lParam, RID_INPUT, buffer, &dataSize, sizeof(RAWINPUTHEADER)) != dataSize) {
// 獲取輸入數據失敗的處理
}
RAWINPUT* raw = (RAWINPUT*)buffer;
if (raw->header.dwType == RIM_TYPEMOUSE) {
if (raw->data.mouse.usButtonFlags & RI_MOUSE_WHEEL) {
// 判斷是否為鼠標滾輪數據
SHORT wheelDelta = (SHORT)raw->data.mouse.usButtonData;
// 處理鼠標滾輪數據
delete[] buffer;
return 0;
}
}
delete[] buffer;
}
break;

在上述代碼中,我們首先獲取原始輸入數據的大小,然后分配一個緩沖區來存儲數據。接著,我們使用GetRawInputData函數獲取原始輸入數據。然后,我們可以檢查RAWINPUT結構體的dwType字段是否為RIM_TYPEMOUSE,以確定該輸入是否為鼠標數據。如果是鼠標數據,我們可以檢查usButtonFlags字段是否包含RI_MOUSE_WHEEL標志,以確定該輸入是否為鼠標滾輪數據。如果是滾輪數據,我們可以使用usButtonData字段來獲取滾輪的偏移量。

請注意,上述代碼僅處理鼠標滾輪數據,并假定你已經創建了一個窗口并獲得了該窗口的句柄(hwnd)。如果你需要處理其他類型的原始輸入數據,可以修改使用的參數和處理邏輯。

0
克什克腾旗| 夏河县| 修武县| 科技| 锡林郭勒盟| 彭泽县| 高平市| 庆安县| 绥棱县| 龙里县| 锡林郭勒盟| 永城市| 天镇县| 陇西县| 兰西县| 托克逊县| 凤山县| 宜兰市| 顺平县| 越西县| 秭归县| 彰化市| 保亭| 泗洪县| 竹溪县| 福建省| 丰县| 长丰县| 新干县| 罗源县| 瓦房店市| 沿河| 资阳市| 肥西县| 汾阳市| 临潭县| 灵宝市| 石河子市| 沈丘县| 循化| 济阳县|