鼠标跟踪的原始输入始终返回 0 作为增量值

Raw Input for mouse tracking always returns 0 for delta values

本文关键字:返回 跟踪 原始 输入 鼠标      更新时间:2023-10-16

注册的原始输入设备不会给出鼠标增量,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.lLastXY始终为 0。

好吧,伙计们,问题是这些行:

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

只需将它们都设置为大小(RAWINPUT(,它就可以工作我从msdn文章中得到了它,但事实证明这是错误的