Графика для Windows средствами DirectDraw


Интерфейс DirectInputDevice - часть 2


Ту же самую информацию можно получить функцией EnumDevices() интерфейса DirectInput, так что, строго говоря, эта функция не является обязательной.

Функция GetDeviceState() предназначена для получения непосредственных данных от устройства. Она определяет состояние устройства на момент вызова функции. Например, с ее помощью можно узнать об одновременном нажатии двух клавиш.

Функция SetDataFormat() описывает формат, в котором вводимые данные возвращаются устройством. Приложение может определить собственный формат, а в DirectInput предусмотрены три стандартных формата для стандартных устройств:

  • c_dfDIKeyboard

  • c_dfDIMouse

  • c_dfDIJoystick

Перед захватом устройства необходимо вызвать для него функцию SetDataFormat().

Функция SetEventNotification(), особенно часто используемая в многопоточных приложениях, предназначена для обработки оповещений. При изменении состояния данного устройства DirectInput сигнализирует о наступлении события. Таким образом, поток может перейти в режим блокировки (например, с помощью функции WaitForSingleObject()) и ожидать изменений в устройстве ввода. При наступлении события поток автоматически отреагирует на него.

Каждое устройство ввода содержит один или несколько объектов. Для клавиатуры объект представляет отдельную клавишу. Для мыши объекты представляют каждую кнопку и каждую ось. Функция EnumObjects() составляет список объектов заданного устройства и возвращает для каждого объекта GUID и строку. Строка содержит неформальное описание объекта (например, «ось X» или «Right Shift»). GUID описывает тип объекта и может принимать одно из следующих значений:

  • GUID_XAxis

  • GUID_YAxis

  • GUID_ZAxis

  • GUID_RAxis

  • GUID_UAxis

  • GUID_VAxis

  • GUID_Button

  • GUID_Key

  • GUID_POV

Чтобы успокоить вас, скажу, что функция EnumObjects() обычно не нужна, особенно для стандартных устройств. Например, для работы с клавиатурой вам не придется составлять список всех клавиш.

Функция GetObjectInfo() позволяет получить ту же информацию, что и EnumObjects(), но без предварительного составления списка объектов.


Начало  Назад  Вперед



Книжный магазин