Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
54
Добавлен:
03.06.2014
Размер:
2.63 Mб
Скачать

Задать форму курсора в текстовом режиме

С помощью функции 0Ah программа может изменять форму курсора мыши в текстовом режиме.

Регистры на входе:

AX = 000Ah

BX = тип курсора:

0 - определяемый программно;

1 - определяемый аппаратно;

CX = маска экрана (для BX=0) или начальная строка курсора (для BX=1);

DX = маска курсора (для BX=0) или конечная строка курсора (для BX=1)

Регистры на выходе:

Регистры не используются

В зависимости от содержимого регистра BX драйвер мыши использует курсор, определяемый аппаратными средствами, либо курсор, определяемый программно. По умолчанию используется “программный курсор”, который отображается в виде символа с инвертированным значением атрибута. Курсор, сформированный аппаратными средствами, выглядит аналогично обычному текстовому курсору, его форма - прямоугольник. Размер этого прямоугольника можно задавать при помощи регистров CX и DX.

Для курсора, определяемого программно, вначале выполняется операция логического “И” над содержимым видеопамяти в том месте, куда указывает курсор, и маской экрана. Затем выполняется операция “Исключающее ИЛИ” с маской курсора.

Младший байт масок соответствует коду ASCII символа, старший - это байт атрибута символа.

Значения, используемые по умолчанию - BX=7700h, CX=FFFFh.

Если вам надо изменить цвет курсора, не меняя его форму, задайте CX=00FFh, BX=xx00h, где xx определяет цвет (смотри описание формата байта атрибутов в 21 томе «Библиотеки системного программиста», который называется «Программирование видеоадаптеров»).

ПрограммаMstform

Приведем исходный текст программы MSTFORM (листинг 3.4), создающую курсор в виде вертикальной стрелки, направленной вверх, на синем фоне.

Листинг 3.4. Файлmstform\mstform.c

// =====================================================

// Изменение формы курсора в текстовом режиме

//

// (C) Фролов А.В, 1997

//

// E-mail: frolov@glas.apc.org

// WWW: http://www.glasnet.ru/~frolov

// или

// http://www.dials.ccas.ru/frolov

// =====================================================

#include <dos.h>

#include <stdio.h>

#include <conio.h>

union REGS reg;

void ms_tform(int type, int mask1, int mask2);

int main(void)

{

// Инициализируем мышь

reg.x.ax = 0;

int86(0x33, &reg, &reg);

if(reg.x.bx == 0)

{

printf("Mouse not found\n");

return -1;

}

// Задаем новую форму для курсора мыши

ms_tform(0, 0, 0x1418);

// Включаем курсор

reg.x.ax = 1;

int86(0x33, &reg, &reg);

getch();

return 0;

}

void ms_tform(int type, int mask1, int mask2)

{

reg.x.ax = 0xA;

reg.x.bx = type;

reg.x.cx = mask1;

reg.x.dx = mask2;

int86(0x33,&reg,&reg);

}

Определить содержимое счетчиков перемещения

Функция 0Bh позволяет определить относительное перемещение мыши с момента последнего вызова этой функции. Результат возвращается в указанных выше регистрах. Для измерения перемещения используется единица mickey - “мики”. Один мик соответствует 0.005 дюйма (то есть 1/200 дюйма).

Регистры на входе:

AX = 000Bh

Регистры на выходе:

CX = перемещение по горизонтали с момента последнего вызова функции;

DX = перемещение по вертикали с момента последнего вызова функции

Отрицательные значения перемещения означают движение влево и вверх, положительные - вправо и вниз.

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

Соседние файлы в папке несколько программ