Несколько приемников необработанных окон ввода

У меня есть окно только для сообщений (ATL::CWindowImpl), которое регистрируется для необработанного ввода с использованием флага RIDEV_INPUTSINK, что означает, что оно получает все вводимые данные независимо от того, является ли окно окном переднего плана. Это прекрасно работает, когда есть только один экземпляр этого окна.

Однако, когда я создаю более одного экземпляра моего окна, только один из них получает сообщения WM_INPUT (в настоящее время я создаю два экземпляра, и только второй, который должен быть создан, получает сообщения).

RegisterRawInputDevices (используя RIDEV_INPUTSINK | RIDEV_NOLEGACY) завершается успешно при создании обоих окон. Кроме того, окно, не получающее необработанный ввод, по-прежнему получает другие сообщения, так что это не проблема с самим окном...

Если это уместно, я использую бета-версию VC11, и окна создаются и отправляют сообщения на разные потоки (используя std::thread).

Является ли это ограничением API (т. е. вы ограничены одним входным приемником на процесс)? Или есть способ заставить это работать?

Заранее спасибо.

РЕДАКТИРОВАТЬ:

Прямо сейчас мой текущий обходной путь состоит в том, чтобы иметь только одно окно и передавать входящие сообщения в другие окна, однако это беспорядок и не будет работать в случае, если я этого хочу. для работы (где у меня есть плагины для загрузки приложений, которым может потребоваться необработанный ввод, я не хочу, чтобы они регистрировались в моем приложении, если мне действительно не нужно делать это таким образом...).

5
задан RaptorFactor 18 March 2012 в 02:17
поделиться