Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы_к_экзамену_КГиМТ.doc
Скачиваний:
44
Добавлен:
28.05.2015
Размер:
1.01 Mб
Скачать

1. Мышь

Наиболее распространенным устройством ввода графической информации в ПЭВМ является мышь. Она подключается к компьютеру через интерфейсRS-232. При перемещении мыши и/или нажатии/отпускании кнопок мышь передает в компьютер информацию о своих параметрах (величине перемещения и статусе кно­пок). Существует много различных типов устройства мыши, отличающихся как по принципу работы (механиче­ский, оптомеханический, оптический), так и по протоколу общения с ЭВМ. "Взаимопонимание" между мышью и ЭВМ при этом достигается с помощью драйвера, поставляемого вместе с мышью. Драйвер отслеживает пере­мещение мыши и нажатие/отпускание кнопок и обеспечивает работу с курсором мыши на экране дисплея.

Конструктивно близок к мыши манипулятор джойстик. Он представляет собой свободно передвигаемый стержень (ручку) и две кнопки-переключателя. Стержень джойстика передвигается в двух измерениях (коорди­наты Х иY). Нажатие кнопок-переключателей фиксируется и обрабатывается программно. Обычно джойстик подключается к специальному игровому порту и в настоящее время в машинной графике используется редко.

Работа с мышью организуется через механизм прерываний. Прикладная программа вызывает прерывание 33h, передавая в регистрах необходимые параметры и получая через регистры возвращаемые драйвере) значения. Существуют различные стандарты работы с мышью. Наиболее распространены стандартыIBMMicrosoft. Из драйверов наиболее известныmouse.coinиgmouse.comОни поддерживают множество функции мыши, связанных с внешним видом, положением и перемещением курсора, а также с определением состояния кнопок мыши. Для программирования той или иной функции мыши требуется только знать ее номер и параметры, заносимые в регистры перед вызовом прерывания. Обычно номера функций драйвера заменяются их мнемоническими именами в заголовочном файле (например,mouse.h), сами тексты функций собираются в отдельный файле (например,mouse.cpp). Такая пара (mouse.hиmouse.cpp) ориентируется на конкретный драйвер. В [1,4] приводятся варианты программного обеспечения - для драйверовmouse.comиgmouse.com.

Любая библиотека обычно содержит следующие функции:

  • проверка наличия мыши;

  • показ/сокрытие курсора мыши (при сокрытии драйвер мыши продолжает отслеживать ее перемещение);

  • чтение состояния мыши (ее координат и состояния кнопок - нажато/отжато);

  • передвижение курсора мыши в заданную точку;

  • установка области перемещения курсора мыши.

По умолчанию форма курсора мыши определяется оборудованием и драйвером. Ее можно изменить. В текстовом режиме курсор мыши отображается на экране совместно с текстовым курсором и представляет собой прямоугольник размером в один символ. Вид изображения при перекрытии курсором мыши чего-либо определяется параметром и передаваемыми функции изображения курсора текстового режима. Эти параметры (маска экрана и маска курсора) состоят из 16 бит и задают мерцание, цвет и фон, также изображаемый при наложении курсора символ. Маска экрана участвует в логической операции ANDс атрибутами перекрытого участка экрана, далее выполняется операцияXORс маской курсора. Например, для инвертирования изображения маска экрана - 0xFFFF, маска курсора - 0х770.

В графическом режиме также имеется курсор по умолчанию (от драйвера). Обычно это небольшая стрелка. Вид курсора также можно изменить. Над маской экрана и маской курсора выполняются аналогично текстовому режиму операцииANDи XOR. Но под каждую маску отводится не 16 бит, а по 16 16-битовых величин (intmask[l][15]). Для создания собственного курсора полезна таблица взаимодействия масок:

Маска экрана

Маска курсора

Рез-т на экране

0

0

0

0

1

1

1

0

Не измен.

1

1

Инверсия

Следует обратить внимание на рациональную реализацию обработки событий от мыши. Не требуете; все время опрашивать драйвер мыши. Ему передается адрес функции, которую следует вызвать при наступлении заданного события. Первый параметр - указатель на функцию, второй параметр - маска событий. События соединяются побитовой операцией ИЛИ. Функция, которая обрабатывает событие, получает маску вызывающего события, маску состояния кнопок мыши. координаты курсора мыши.