Зарегистрированное необработанное устройство ввода не дает дельты мыши, WM_INPUT
срабатывает и передает оператор if(raw->header.dwType == RIM_TYPEMOUSE)
, но значения всегда равны 0
void InputSetup() {
RAWINPUTDEVICE rid;
rid.usUsagePage = HID_USAGE_PAGE_GENERIC; //0x01
rid.usUsage = HID_USAGE_GENERIC_MOUSE; //0x02
rid.dwFlags = RIDEV_INPUTSINK; //0x00000100
rid.hwndTarget = hWnd_main; //Window Handle
RegisterRawInputDevices(&rid, 1, sizeof(rid)); //Registring RID
}
LRESULT CALLBACK WndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch(uMsg){
//...
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) {
MouseDelta.x = raw->data.mouse.lLastX;
MouseDelta.y = raw->data.mouse.lLastY;
}
break;
//...
}
}
MouseDelta
Всегда(0, 0)
.WM_INPUT срабатывает, но raw->data.mouse.lLastX
и Y
всегда равны 0.