Графические устройства

         

Управление перемещением курсора

Необходимость перемещения курсора возникает при обработке тех событий, которым в табл. 6.2 соответствуют коды от 4 до 7. Перемещение в чистом виде вызывает только событие с кодом 4 — мышь движется, кнопка не нажата и ее состояние не изменялось. Если же мышь движется при нажатой кнопке, то кроме перемещения курсора могут выполняться и другие действия, например "перетаскивание" объекта, на который указывает курсор.

Предварительные замечания

В зависимости от того, какая из кнопок является ведущей (обычно левая), имя подпрограммы, выполняющей перемещение курсора, располагается на пятом месте одного из списков choiceL или choiceR. Указывать это имя на пятом месте обоих списков не имеет смысла. При обработке событий с кодами от 5 до 7 такой проблемы не возникает, поскольку предполагается, что одновременное нажатие обеих кнопок в задачах не используется. Подпрограмма statms не фиксирует этот случай, поскольку состояния кнопок анализируются независимо друг от друга.

Для перемещения изображения курсора надо выполнить следующие действия


в такой последовательности: восстановить исходный фон на месте старого изображения, вычислить адрес видеопамяти, соответствующий новому значению координат, и вывести изображение курсора на новом месте (одновременно сохранив исходный фон).

Перечисленные действия выполняет подпрограмма Motion, текст которой приведен в примере 6.13. Кроме нее в текст примера включены еще две подпрограммы, обращение к которым происходит из управляющего алгоритма при нажатии оператором на клавиши с рисунками стрелок, направленных влево, вправо, вверх и вниз. Подпрограмма Mothor перемещает курсор на шаг вправо или влево, a Motver — вверх или вниз. Шаг и направление перемещения задается в регистре bх, для перемещения в сторону уменьшения значений координат его содержимое должно быть отрицательным числом.

Подпрограммы Mother и Motver являются вспомогательными, основные действия выполняет Motion.

Восстановление исходного фона и построение изображения курсора было описано в разделе

Содержание раздела