![](/books/images/tmp32A8-32.png)
В оптомеханической мыши используется диск с отверстиями и пара светодиод-фотодиод для определения перемещения мыши (рис. 4.2).
![](/books/images/tmp32A8-33.png)
Оптическая мышь никаких движущихся деталей не использует. Она передвигается по специальной подложке, покрытой тонкой сеткой отражающих свет линий.
Компьютерная графика. Полигональные модели
![](/books/images/tmp32A8-34.png)
При этом липни одного направления имеют один цвет (обычно синий), а линии другого направления другой (обычно черный). Когда мышь перемещают по подложке, свет, излучаемый двумя светодиодами заданных цветов, отражается от соответствующих линий и попадает в фотодиоды, передавая тем самым информацию о перемещении мыши (рис. 4.3).
Для достижения некоторой унификации каждая мышь поставляется обычно вместе со своим драйвером - специальной программой, понимающей данный конкретный тип мыши и предоставляющей некоторый (почти универсальный) интерфейс прикладным программам. При этом вся работа с мышью происходит через драйвер, который отслеживает перемещения мыши, нажатие и отпускание кнопок мыши и обеспечивает работу с курсором мыши - специальным маркером на экране (обычно в виде стрелки), дублирующим все передвижения мыши и дающим возможность пользователю указывать мышью на те или иные объекты на экране.
Работа с мышью реализуется через механизм прерываний. Прикладная программа осуществляет прерывание 33h, передавая в регистрах необходимые параметры, и в регистрах же получает значения, возвращенные драйвером мыши.
Приводим набор функций для работы с мышью в соответствии -со стандартом фирмы Microsoft (ниже приведены используемые файлы Mouse.h и Mouse.срр).
(2) // File Mouse.h
#ifndef __MOUSE_ #define __MOUSE__
#include "point.h"
#include Teeth"
// mouse event flags
#define MOUSE_MOVE_MASK 0x01
#define MOUSE_LBUTTON_PRESS 0x02
#define MOUSE_LBUTTON_RELEASE 0x04
#define MOUSE_RBUTTON_PRESS 0x08
#define MOUSE_RBUTTON_RELEASE 0x10
#define MOUSE_MBUTTON_PRESS 0x20
#define MOUSE Jv1BUTTON__RELEASE 0x40
#define MOUSE_ALL_EVENTS 0x7F