Дела мышиные

(Окончание, начало в №37)

Как Вы помните, драйвер мыши, обрабатывающий 33h прерывание, имеет свыше трех десятков функций, управляющих ее работой. Рассмотренные ранее функции позволяют использовать мышь для управления ходом работы программы. Сегодня поговорим о тех функциях, которые позволяют нам настроить мышь под себя.

Изучение нового материала начнем с повторения старого. Для того, чтобы можно было работать с мышью, необходимо выполнить три условия. Во-первых, мышь должна существовать физически. Во-вторых, она должна быть подключена к компьютеру. И, в-третьих, должна быть загружена программа, выполняющая обработку 33h прерывания, в просторечии - драйвер.

В MS-DOS драйвер можно загрузить двумя способами: во время загрузки операционной системы либо после. Способ загрузки зависит от того, какое расширение имеет программа. Если драйвер имеет расширение .sys, его можно загрузить только при загрузке операционной системы. Для этого в файле config.sys необходимо записать строку:

DEVICE=MOUSE.SYS

 

Такой способ загрузки драйвера использовался во времена возникновения MS-DOS. В настоящее время мне таких драйверов встречать не доводилось. Современные драйверы имеют расширение .com или .exe. Это позволяет загружать драйвер в любой момент, после загрузки операционной системы. Например, Вы можете вставить в файл autoexec.bat строку:

MOUSE.COM

Или, по своему желанию, в командной строке приведенную выше команду - MOUSE.COM и нажать клавишу .

Каким бы способом Вы не воспользовались, после загрузки драйвера проводится его инициализация. При этом курсор будет установлен в центр экрана и сможет перемещаться по всей его поверхности. Жизнь - сложная штука. И всегда существуют хотя бы маленькие ограничения. Как и в реальном, в виртуальном компьютерном мире Вы можете ограничить свободу курсора мыши, создать для него резервацию.

Чтобы сделать это, необходимо воспользоваться функциями драйвера мыши с номерами 07h и 08h. Первая функция устанавливает границы перемещения курсора по вертикали, вторая - по горизонтали. Чтобы обратиться к одной из этих функций, необходимо записать ее номер в регистр AX.

Значение минимальной границы перемещения курсора, левого столбца либо верхней строки, задается в регистре CX, а максимальной границы, правого столбца либо нижней строки, в регистре DX. Единицей измерения является один пиксел.

Минимальное значение, которое может быть записано в регистр CX, равно нулю. Максимальное значение в регистре DX не может быть больше, чем разрешение по горизонтали и вертикали.

Переведу на нормальный русский язык. Если Вы работаете с разрешением 800x600 пикселов, то значение в регистрах CX и DX может принимать значение от 0 до 599, для функции 07h, и от 0 до 799, для функции 08h.

В текстовом режиме мы, по умолчанию, имеем 25 строк по 80 столбцов (символов) в строке. Чтобы перейти от реальных текстовых строк и столбцов к "виртуальным" пикселам, необходимо от номера строки/столбца вычесть единицу и полученный результат умножить на 8.

Каждому должно быть ясно - максимальное значение должно быть по крайней мере не меньше, чем минимальное. Если Вы все-таки допустили такую оплошность, программа выполнит "защиту от дурака". Значения в регистрах CX и DX поменяются местами.

После выполнения любой из этих функций курсор перемещается в пределы, указанные ему выше.

Для точного определения места дислокации курсора мыши предназначена функция 04h. Как всегда, в регистре AX необходимо указать номер функции - 04h. Горизонтальная и вертикальная координаты курсора задается в регистрах CX и DX, соответственно. Не забывайте, что координаты необходимо задавать в пикселах, как в функциях 07h и 08h.

Определив размеры "резервации" и местоположение курсора в ней, Вы получаете возможность задать ограничение на скорость перемещения курсора. Прежде чем сделать это, определим, с какой скоростью он перемещается в настоящее время. Для этого существует функция 1Bh.

В регистр AX записываем 1Bh и вызываем прерывание 33h. Результаты работы программы обработки прерывания читаем из регистров BX, CX и DX. В регистре BX записана чувствительность курсора мыши по горизонтали, в CX - чувствительность курсора по вертикали и в DX - порог удвоенной скорости.

Чувствительность курсора измеряется в микки. Микки - это величина, указывающая драйверу, сколько единиц информации он должен принять от мыши, чтобы переместить курсор на один пиксел. Чувствительность может принимать значения от 1 до 32767 микки на пиксел.

Из определения микки следует, что его малые значения заставляют курсор перемещаться по экрану с реактивной скоростью. Большие значения делают курсор главным фаворитом на последнее место в бегах среди черепах.

Малое значение чувствительности мыши позволяет быстро перемещать курсор по экрану, но при этом затрудняется его точное позиционированние в нужных точках экрана. Компромисс между скоростью и точностью может быть найден, если установить такой параметр мыши, как порог удвоенной скорости. Он определяет, на сколько микки за одну секунду должна переместиться мышь, чтобы скорость перемещения курсора на экране увеличилась в 2 раза. Текущее значение этого параметра возвращается функцией 1Bh в регистре DX.

После того, как Вы установите этот параметр, для быстрого перемещения курсора из одного угла экрана в другой, достаточно быстро "дернуть" мышь в заданном направлении и затем медленно подвести курсор в нужную точку.

Оптимальные значения чувствительности мыши по вертикали и горизонтали, а также порога удвоенной скорости Вы получите, занимаясь программированием мыши. По умолчанию, после инициализации драйвера, установлены следующие значения: чувствительность мыши по горизонтали - 8 микки; по вертикали - 16 микки; порог удвоенной скорости - 64 микки/сек.

Функция 1Ah прерывания 33h предназначена для того, чтобы изменять значения любого из этих параметров. Для этого в регистр AX записываем номер функции, 1Ah, в регистр BX - новое значение чувствительности мыши по горизонтали, в CX - по вертикали, и в DX - порог удвоенной скорости перемещения. В регистрах BX и CX единицей измерения является микки. В регистре DX - микки/сек.

На сегодня теории достаточно. Переходите к практике. Усаживайтесь за клавиатуры и терроризируйте мышь.

Сергей ОСОКО

Версия для печатиВерсия для печати

Номер: 

38 за 1997 год

Рубрика: 

Азбука программирования
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!