Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Графика -> Гончаров Д. -> "DirectX 7.0 Для программистов" -> 135

DirectX 7.0 Для программистов - Гончаров Д.

Гончаров Д., Салихо Т. DirectX 7.0 Для программистов — Спб.: Питер, 2001. — 528 c.
ISBN 5-318-00173-4
Скачать (прямая ссылка): dirext7dlyaprogrammistov2001.djvu
Предыдущая << 1 .. 129 130 131 132 133 134 < 135 > 136 137 138 139 140 141 .. 229 >> Следующая

О Для установки формата данных мыши существуют два предопределенных значения: c dfDIMouse и c_dfDIMouse2, которые могут передаваться методу
Базовые возможности Directlnput
313
IDi rectlnputDevi ce7:: SetDataFormat в качестве параметра. Первое из этих значений позволяет работать с мышью, имеющей до четырех кнопок, второе — до восьми кнопок. Поэтому в большинстве случаев разумно использовать формат данных c_dfDIMouse, тем более что выбор формата влияет на последующее получение данных.
О Поскольку и мышь и клавиатура представлены в программе одним и тем же интерфейсом IDirectInputDevice7, захват и освобождение мыши будут производиться упоминавшимися методами Acquire и Unacquire. Более того, для захвата и освобождения мыши мы воспользуемся той же тактикой, что и при работе с клавиатурой: в ответ на сообщение WM_ACTIVATE будем то захватывать, то освобождать мышь в зависимости от того, происходит получение или потеря приложением активности.
Единственный пункт, в котором работа с мышью отличается от работы с клавиатурой — это получение данных. Далее мы рассмотрим реализацию буферизированного опроса мыши.
Задание размера буфера
Прежде чем устройство ввода (в нашем случае мышь) будет захвачено, необходимо задать размер его буфера, чтобы получить возможность считывать из этого буфера данные. Это сообщит Directlnput, что будут использоваться именно буферизированные данные, так как по умолчанию размер буфера для устройства ввода равен нулю.
Изменение любой характеристики устройства ввода, в том числе размера буфера для него, производится при помощи метода интерфейса IDi rectlnputDevi се7: HRESULT SetProperty(
REFGUID rguidProp,
LPCDIPROPHEADER pdiph
):
Первый параметр этого метода является идентификатором характеристики, которую требуется изменить. Этот идентификатор может представлять собой либо одно из предопределенных значений, либо GUID соответствующей характеристики. Предопределенных значений, которые можно использовать в качестве данного параметра, достаточно много, так как для каждого устройства ввода потенциально существует огромное количество изменяемых характеристик. Например, значение DIPROP BUFFERSIZE говорит о том, что будет происходить изменение размера входного буфера для устройства. А значение DIPROPAXISMODE позволяет изменять способ получения координат с относительного на абсолютный, и наоборот. Другие значения можно узнать из справочной системы.
Второй параметр представляет собой адрес структуры, в которой содержатся данные для настройки характеристики, указанной в первом параметре. Этот параметр стоит рассмотреть подробнее.
Для того чтобы использовать его, в программе необходимо определить собственную структуру, которая должна включать заголовок типа DIPROPHEADER и некоторые элементы данных. Тип заголовка определен в Directlnput, а данные должен определить сам программист.
314
Урок 10 • Основы использования Directlnput
Заголовок служит для хранения размера определяемой структуры и информации, указывающей, каким образом будут интерпретироваться следующие за заголовком данные этой структуры: typedef struct DIPROPHEADER {
DWORD dwSize;
DWORD dwHeaderSize;
DWORD dwObj:
DWORD dwHow;
} DIPROPHEADER, *LPDIPROPHEADER;
Первое поле заголовка должно содержать размер всей структуры в целом вместе с заголовком. Во втором поле, dwHeaderSize, указывается размер только заголовка. Два последних поля взаимозависимы. Точнее, поле dwObj (описывающее объект, характеристика которого изменяется) зависит от содержимого поля dwHow. Если dwHow содержит значение DIPHDEVICE, то поле dwObj должно содержать 0. Если dwHow содержит значение DIPHBY0FFSET, то dwObj представляет собой смещение в текущем формате данных до того объекта, для которого будет происходить изменение характеристик. Если же dwHow содержит значение DIPH_BYID, то dwObj является идентификатором типа изменяемого объекта или его экземпляра.
Говоря проще, если dwObj содержит значение DIPHDEVICE, то происходит изменение характеристики, касающейся всего устройства ввода в целом. А если в поле dwObj указано значение DIРН_ВY0FFSET или DIPH BYID, то будет производиться изменение характеристики объекта, являющегося составной частью устройства ввода.
Следом за заголовком типа DIPROPHEADER, как мы сказали, должны располагаться данные, содержащие конкретное значение изменяемой характеристики. При передаче адреса определенной в программе структуры методу SetProperty происходит приведение типа к LPCDIPR0PHEADER, поскольку тип структуры заранее не известен.
Ничего сложного в приведенном описании изменения характеристик устройства на самом деле нет, но Microsoft решила упростить изменение основных характеристик устройств ввода, и ввела несколько предопределенных типов для выполнения этих операций. Наиболее часто используемые из них:
О DIPR0PDW0RD — структура состоит из заголовка DIPROPHEADER и одного значения типа DWORD. Используется для изменения характеристик, определяемых одним параметром, таких как размер буфера.
О DIPR0PRANGE — структура состоит из заголовка DIPROPHEADER и двух значений типа LONG. Используется для изменения характеристик, определяемых двумя параметрами, таких, например, как минимальное и максимальное значения.
Предыдущая << 1 .. 129 130 131 132 133 134 < 135 > 136 137 138 139 140 141 .. 229 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.