Стэн Трухильо - Графика для Windows средствами DirectDraw
- Название:Графика для Windows средствами DirectDraw
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стэн Трухильо - Графика для Windows средствами DirectDraw краткое содержание
Графика для Windows средствами DirectDraw - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
По умолчанию мышь возвращает относительные данные, а джойстик — абсолютные. В программе Smear для мыши используется установка по умолчанию, однако следует помнить о том, что тип данных можно изменить как для джойстика, так и для мыши.
Приложение DirectDraw в случае необходимости может уступить видеопамять другому приложению и восстановить ее, когда исходное приложение снова получит фокус. В DirectInput приложение тоже может потерять устройство и восстановить контроль над ним перед тем, как продолжить работу. В таких случаях говорят, что приложение захватывает устройство (acquire) или уступает его (unacquire). Для получения данных необходимо захватить устройство. Приложение может уступить устройство по требованию (доступ к устройству передается Windows или другому приложению) или автоматически (например, если DirectInput отбирает право доступа к устройству, чтобы передать его другому приложению).
Некоторые устройства (особенно клавиатуры и мыши) регулярно захватываются и уступаются приложениями. Обычно они уступаются автоматически в тот момент, когда приложение теряет фокус. Когда ваше приложение опять получает фокус, оно должно снова захватить устройство.
DirectInput API
До выхода DirectX 3 библиотека DirectInput была построена на существующих функциях Win32 и не поддерживала ввода с клавиатуры или от мыши. В DirectX 3 появились COM-интерфейсы для клавиатуры и мыши, но все остальные устройства продолжали зависеть от функций Win32 (и особенно от функции joyGetPosEx()). В DirectX 5 зависимость DirectInput от Win32 полностью устранена, а все устройства ввода переведены на использование COM-интерфейсов. Работа с устройствами ввода реализована через три интерфейса:
• DirectInput
• DirectInputDevice
• DirectInputEffect
Первичным, или главным, является интерфейс DirectInput. Создание его экземпляра приводит к инициализации библиотеки, а все остальные интерфейсы DirectInput могут быть инициализированы лишь с помощью его функций.
Интерфейс DirectInputDeviceпредставляет устройство ввода. Его функции выполняют инициализацию, настройку, захват и отпускание устройств. Что еще важнее, DirectInputDeviceсодержит функции для получения данных от устройства.
Интерфейс DirectInputEffectприменяется для обслуживания устройств с обратной связью. В этой книге он не используется.
Инициализация DirectInputпроисходит в тот момент, когда вы получаете указатель на интерфейс DirectInputфункцией DirectInputCreate(). Затем полученным интерфейсом можно воспользоваться для создания экземпляров интерфейса DirectInputDevice, составления списка доступных устройств и даже для вызова панели управления DirectInput. Интерфейс DirectInputсодержит следующие четыре функции:
• CreateDevice()
• EnumDevice()
• GetDeviceStatus()
• RunControlPanel()
Функция CreateDevice()создает новые экземпляры интерфейса DirectInputDevice. Она получает три аргумента: GUID нужного устройства, адрес инициализируемого указателя на интерфейс и показатель агрегирования (aggregation) COM, который обычно должен быть равен нулю. Для системной мыши и клавиатуры в DirectX предусмотрены стандартные значения GUID:
• GUID_SysKeyboard
• GUID_SysMouse
Значения GUID остальных устройств можно получить функцией EnumDevices().
Функция EnumDevices()обнаруживает устройства ввода, установленные на данном компьютере. Она позволяет составить список устройств по их типу, по факту их текущего подключения к компьютеру и по тому, являются ли они устройствами с обратной связью. Для каждого устройства, обнаруженного функцией EnumDevices(), предоставляются два значения GUID: GUID экземпляра и GUID продукта. GUID экземпляра идентифицирует конкретное устройство, а GUID продукта — его тип. При вызове функции CreateDevice()используется GUID экземпляра.
С помощью функции GetDeviceStatus()можно определить, доступно ли устройство для DirectInput в данный момент. Код возврата DI_OKозначает, что устройство подключено и доступно. Функция RunControlPanel()вызывает приложение DirectInput Control Panel. Точнее, она вызывает приложение DirectX Control Panel и активизирует вкладку DirectInput.
Доступ ко всем устройствам ввода, представленным в DirectInput, осуществляется через интерфейс DirectInputDevice. Интерфейс DirectInputDeviceсодержит следующие функции:
• Acquire()
• Unacquire()
• GetCapabilities()
• GetDeviceData()
• GetDeviceInfo()
• GetDeviceState()
• SetDataFormat()
• SetEventNotification()
• EnumObjects()
• GetObjectInfo()
• GetProperty()
• SetProperty()
• SetCooperativeLevel()
• RunControlPanel()
Не стоит полагать, что для работы с устройствами понадобятся все эти функции. Тем не менее мы кратко рассмотрим каждую из них.
Функции Acquire()и Unacquire()устанавливают и разрывают связь между устройством ввода и DirectInput. Перед тем как получать от устройства данные, необходимо захватить его.
Функция Acquire()используется для начального захвата устройства и для восстановления нарушенной связи с устройством. Обычно связь между устройством ввода и DirectInput разрывается из-за того, что приложение теряет фокус ввода. Функция Unacquire()используется, как правило, для того, чтобы вернуть Windows право доступа к устройству. Например, при работе с меню необходимо уступить объекты DirectInputDevice, представляющие мышь и клавиатуру, чтобы Windows могли нормально обработать выбор команды меню.
Функция GetCapabilities()с помощью структуры DIDEVCAPSописывает возможности устройства, в том числе количество кнопок, количество осей и поддержку обратной связи. Кроме того, в структуру включаются описания конкретных особенностей (или ограничений) устройства, влияющих на его использование. Например, установка флага DIDC_POLLEDDEVICEозначает, что от устройства можно получать лишь непосредственные данные.
Функция GetDeviceData()получает от устройства буферизованные данные. Она позволяет извлечь из буфера один или несколько элементов, а также просмотреть его содержимое (то есть прочитать элементы буфера без их удаления).
Функция GetDeviceInfo()заполняет структуру DIDEVICEINSTANCEинформацией об устройстве. В структуру заносятся значения GUID экземпляра и продукта для данного устройства, а также строки с неформальными описаниями. Ту же самую информацию можно получить функцией EnumDevices()интерфейса DirectInput, так что, строго говоря, эта функция не является обязательной.
Функция GetDeviceState()предназначена для получения непосредственных данных от устройства. Она определяет состояние устройства на момент вызова функции. Например, с ее помощью можно узнать об одновременном нажатии двух клавиш.
Читать дальшеИнтервал:
Закладка: