У нас есть 3D-приложение, которое извлекает нажатия клавиш с помощью IDirectInputDevice8. Есть ли какой-нибудь способ, когда мы возвращаем события клавиатуры через цикл winproc win32 API назад, что мы можем отправлять эти команды в DirectInputDevice?IDirectInputDevice8 Ключ для клавиатуры
ответ
WndProc будет отправлено сочетание этих сообщений о событиях клавиатуры:
WM_SYSKEYDOWN
WM_SYSKEYUP
WM_KEYDOWN
WM_KEYUP
WM_CHAR
опросы Windows, аппаратной клавиатуры за кулисами. Когда происходят ключевые события, он добавляет соответствующие сообщения WM_ * в очередь сообщений Windows (с соответствующей информацией о состоянии клавиатуры). windows message pump извлекает эти сообщения из очереди и обрабатывает их соответственно. Основное преимущество этого подхода заключается в том, что вам действительно не нужно много делать, чтобы овладеть событиями на клавиатуре (кроме того, знание компоновки клавиатуры/аппаратного обеспечения не требуется). Недостатком является то, что он действительно не в режиме реального времени.
Разговор с клавиатурой через DirectInput на самом деле схож, но вам решать опрос. Обычно вы используете DirectInput для настройки клавиатурного устройства, а затем каждый раз, когда вы запускаете цикл обновления, вы определяете состояние клавиатуры GetDeviceState(). Это зависит от вас, чтобы отслеживать состояние клавиатуры между опросами. Лучше всего создать объект, который обертывает эту функциональность, и, возможно, запускает события/обратные вызовы или создает соответствующую команду в очереди в соответствующие моменты времени, чтобы было лучше работать. Преимуществом этого метода является скорость, так как вы напрямую общаетесь с оборудованием и можете мгновенно вызывать обновления. Недостатком является то, что вы должны делать это вручную, что занимает немного времени, чтобы настроить и получить право.
Ознакомьтесь с инструкцией по использованию DirectInput для запроса на клавиатуру this example.
Итак, есть несколько ответов на ваш вопрос:
- Если у вас есть WM_ * Сообщения, почему бы не просто взывают код, обработка DirectInput будет вызывать, следовательно, дает вам такую же функциональность?
- DirectInput через опрос предоставляет вам ту же информацию, что Windows дает вам сообщения WM_ *. Поэтому вам не нужно конвертировать или пытаться сопоставить их друг с другом. Просто проверьте состояние ключей и обработайте случаи, когда состояние изменяется.
- Выберите один метод и выберите другой. Они оба делают то же самое. Я бы рекомендовал использовать DirectInput, если вы хотите скорость и отзывчивость. Если это не так важно, используйте сообщения WM_ *.
Надеюсь, что это поможет. Удачи!
отправить эти команды в DirectInputDevice? – 2008-10-27 22:14:40
DirectInput! = Directc3D :) Правильно вставлен. – 2008-10-27 10:02:24