Трухильо Стэн
Шрифт:
После вызова версии OnActivate базового класса мы проверяем, происходит ли активизация приложения (функция OnActivate вызывается и в случае деактивизации, когда активным становится другое приложение). Если проверка дает положительный результат, мы вызываем функцию Acquire интерфейса DirectInputDevice.
Перед вызовом Acquire можно проверить, не была ли клавиатура захвачена ранее, но в этом нет необходимости. DirectInput игнорирует лишние вызовы функции Acquire.
Теперь по указателю на интерфейс клавиатуры можно определить состояние отдельных клавиш. В нашей программе это происходит в функции DrawScene, перед обновлением экрана. Функция DrawScene приведена в листинге 6.3.
Листинг 6.3. Функция QwertyWin::DrawScene
Состояние устройства определяется функцией GetDeviceState интерфейса DirectInputDevice. Тип и размер второго аргумента GetDeviceState зависят от типа устройства, а также от формата данных, заданного функцией SetDataFormat. Для клавиатуры функция должна получать массив из 256 байт, где каждый байт соответствует одной клавише. В DirectInput предусмотрен набор клавиатурных констант, которые используются как индексы массива и позволяют ссылаться на нужные клавиши. DirectInput обозначает нажатие клавиши установкой старшего бита того байта, который представляет данную клавишу. Объявление массива и вызов функции GetDeviceState находятся в верхней части листинга 6.3, я снова привожу их: