В графическом режиме
С помощью различных масок можно установить любую форму курсора и добиться его видимости на любом фоне. Для режимов 4, 5 и 13h используются только четные столбцы в битовых масках; в противном случае курсор при использовании матрицы 16 х 16 имел бы слишком большие размеры. Для остальных режимов «прореживание» столбцов масок курсора не выполняется. В графических режимах, кроме формы курсора, описывается так называемое «горячее пятно» (hotspot ) в относительных координатах, за точку отсчета которых принят верхний левый угол прямоугольника 16 х 16 пикселей. «Горячее пятно» – это тот пиксель, на который указывает в данный момент графический курсор. Описание курсора манипулятора «мышь» в графическом режиме выполняет функция АХ = 9 прерывания 33h. Далее приводится ее спецификация. Привызове: АХ = 0009Н – установка курсора «мыши» в графическом режиме; ВХ – номер столбца «горячего пятна» курсора относительно верхнего левого угла прямоугольника курсора; СХ – номер строки «горячего пятна» курсора относительноверхнего левого угла прямоугольника курсора; ES: DX – указатель на 32 слова масок: первые 16 слов образуют AND-маску, следующие 16 слов – XOR-маску. Использование битов этих масок иллюстрирует табл. 1. Возврат: нет. Приведем текст Си-функцииустановки графического курсора манипулятора «мышь»: Параметры charhot_spot_row, charhot_spot_col – относительные координаты «горячего пятна» курсора «мыши» в прямоугольнике курсора; unsignedintfarscreen_and_cursor_masks – указатель на две подряд расположенные маски экрана и курсора; первые 16 слов массива образуют маску экрана, следующие 16 – маску курсора. include < dos.h> void set_graph_cursor(int hot_spot_row, int hot_spot_column, unsigned int far screen_and_cursor_masks); struct REGPACK r; r. r_ax = 9; r.r_bx = hot_spot_column; r.r_cx= hot_spot_row; r.r_es=FP_SEG(screen_and_cursor_masks); r.r_dх=FP_QFF(screen_and_cursor_masks); intr(0x33, & r); Для получения графического курсора, видимого на любом фоне, поступают следующим образом. Маску экрана (AND-маскy) задают состоящей из слов FFFFh, а маску курсора (XOR-маску) описывают так, чтобы в ней стояли единицы в тех битах, которые образуют очертание курсора, а нули – во всех остальных битах маски. В качестве примера приводится вызов функции set_graph_cursor 0 для задания графического курсора в форме наклонной стрелки. Формирование битовой карты этого курсора поясняет рис. 2
Рис. 2.XOR-маскаотображения курсора в виде стрелки
static unsigned screen_and cursor_masks AND-маска Oxffff, Oxffff, Oxffff, Oxffff, Oxffff, Oxffff, Oxffff, Oxffff, Oxffff, Oxffff, Oxffff, Oxffff, Oxffff, Oxffff, Oxffff, Oxffff,
|