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

         

Способы перемещения курсора



Способы перемещения курсора

Основные действия, выполняющие перемещение курсора, были описаны в разделе на примере подпрограммы Motion. При работе в режиме прерываний задача должна иметь возможность запрещать перемещение курсора. Например, при построении нового рисунка изображение курсора временно удаляется с экрана. При этом подпрограмма не должна перемещать курсор. Задача может либо временно запрещать драйверу вызов прерывающей подпрограммы, либо устанавливать специальный признак, анализируемый при перемещении курсора.

Первый способ имеет следующий недостаток. В тот момент, когда задача удаляет изображение курсора с помощью подпрограммы Hidepnt, значения переменных winpnt, offspnt, Xpointer, Ypointer (см. пример 6.8) соответствуют значениям СПК внутреннего буфера драйвера. Если задача запретила драйверу вызывать подпрограмму перемещения курсора, а оператор в это время двигает мышь, то новые значения СПК не будут соответствовать значениям указанных переменных. Когда задача восстановит изображение курсора с помощью подпрограммы showpnt, то оно появится на старом месте. А после восстановления работы прерывающей подпрограммы, при первом движении мыши, курсор скачком переместится в новую позицию.

Второй способ избавлен от этого недостатка. Если установлен специальный признак, то прерывающая подпрограмма вычисляет текущие значения переменных winpnt, offspnt, xpointer, Ypointer, но не перемещает курсор. В результате значения этих переменных и СПК всегда будут соответствовать друг другу. Теперь, когда задача вызовет подпрограмму showpnt, изображение курсора появится на новом месте.



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