Необработанный ввод для отслеживания мыши всегда возвращает 0 для значений дельты - PullRequest
0 голосов
/ 15 июня 2019

Зарегистрированное необработанное устройство ввода не дает дельты мыши, 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.

1 Ответ

1 голос
/ 16 июня 2019

Ладно, ребята, проблема была в следующих строках:

UINT dwSize = 40;
static BYTE lpb[40];

просто установите их в sizeof (RAWINPUT), и это сработает. Я понял это из статьи msdn, но оказалось, что это неправильно

...