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

В настоящее время я использую API RawInput из 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;

Что-то не так?

1

Решение

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

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

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]