Мышь RawInput - не может перемещать окно или использовать элементы управления

В настоящее время я использую RawInput API из Windows, чтобы получить доступ к вводу с клавиатуры и мыши. Одна вещь, которую я немного смущаю, это то, что когда я регистрирую свою мышь как RawInputDevice, я не могу перемещать окно Win32 или использовать элементы управления там (закрыть, свернуть и т. д.). Вместо этого я получаю курсор значка загрузки. Это нормальное поведение? Вот как я регистрирую свое устройство:

    RAWINPUTDEVICE Rid[2];

    Rid[0].usUsagePage = 0x01;
    Rid[0].usUsage = 0x02;
    Rid[0].dwFlags = RIDEV_NOLEGACY;   // adds HID mouse and also ignores legacy mouse messages
    Rid[0].hwndTarget = windowHandle;

    Rid[1].usUsagePage = 0x01;
    Rid[1].usUsage = 0x06;
    Rid[1].dwFlags = RIDEV_NOLEGACY;   // adds HID keyboard and also ignores legacy keyboard messages
    Rid[1].hwndTarget = windowHandle;

    if (RegisterRawInputDevices(Rid, 2, sizeof(Rid[0])) == FALSE) {
         // smth went wrong.
    }

И вот как я обрабатываю случай WM_INPUT:

case WM_INPUT:
    char buffer[sizeof(RAWINPUT)] = {};
    UINT size = sizeof(RAWINPUT);
    GetRawInputData(reinterpret_cast<HRAWINPUT>(lParam), RID_INPUT, buffer, &size, sizeof(RAWINPUTHEADER));
    RAWINPUT* raw = reinterpret_cast<RAWINPUT*>(buffer);
    if (raw->header.dwType == RIM_TYPEMOUSE || raw->header.dwType == RIM_TYPEKEYBOARD) {
        inputManager.processMessage(*raw);
    }
    break;

Здесь что-то не так?


person puelo    schedule 17.03.2014    source источник
comment
Да, потому что это не работает так, как вы хотели. Что вы уже разработали?   -  person OMGtechy    schedule 17.03.2014


Ответы (1)


Вы устанавливаете флаг RIDEV_NOLEGACY. Это отключает устаревшие сообщения мыши.

Следовательно, оконная процедура по умолчанию не получает сообщения мыши. Таким образом, он не может перемещать ваше окно или реагировать на нажатия кнопок или что-то еще. Что вы и видите.

person arx    schedule 17.03.2014
comment
О Боже. Большое спасибо! - person puelo; 17.03.2014