Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Работа с мышью.doc
Скачиваний:
2
Добавлен:
16.11.2019
Размер:
79.36 Кб
Скачать

Задание формы курсора в графическом режиме.

С помощью функции 09h программа, работающая в графическом режиме, может изменить форму курсора мыши и положение точки внутри изображения курсора, координаты которой используются в качестве координат курсора остальными функциями.

Регистры на входе: АХ = 0009h

ВХ = номер позиции точки-указателя графического курсора (от -16 до 16);

CX = номер строки точки-указателя (от -16 до 16)

ES:DX = указатель на растровое изображение курсора

Регистры на выходе: Регистры не используются

Регистры ES:DX указывают на область памяти размером 64 байта. Эта область состоит из двух массивов длиной по 32 байта. Первый массив представляет собой логическую маску размером 16х16 бит, которая накладывается на участок видеопамяти с использованием логической операции "И". Второй массив - тоже маска размером 16х16 бит, но она накладывается с использованием логической операции "Исключающее ИЛИ", инвертируя отдельные точки изображения.

Номера позиции и строки точки-указателя, устанавливаемые по умолчанию, равны нулю (ВХ = СХ = 0). Это соответствует верхней левой точке в изображении курсора. Значения ВХ = СХ = 15 соответствуют нижней правой точке.

Задание формы курсора в текстовом режиме.

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

Регистры на входе: AX = 000Ah

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

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

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

СХ = маска экрана (для ВХ = 0) или конечная строка курсора (для ВХ = 1)

DX = маска курсора (для ВХ = 0) или конечный столбец курсора (для ВХ = 1)

Регистры на выходе: Регистры не используются

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

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

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

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

Если требуется изменить цвет курсора, не меняя его форму, надо задать СХ = 00FFh, ВХ = хх00h, где хх определяет цвет.

Программа 7.1 инициализирует мышь, а также определяет количество клавиш мыши.

#include<stdio.h>

#include<conio.h>

#include<dos.h>

Int main(void)

{

Int nButtons;

union REGS rg;

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

rg.x.ax=0;

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

if(rg.x.bx==0)

{

printf("Mouse not found\n");

return -1;

}

//Сохраняем количество клавиш

nButtons=rg.x.bx;

printf("Mouse type :");

switch(nButtons)

{

case 2:

{

printf("2-button mouse\n");

break;

}

case 3:

{

printf("3-button mouse\n");

break;

}

case 0:

{

printf("Unknown type %d\n", nButtons);

break;

}

default:

{

printf("Unknown type %d\n", nButtons);

break;

}

}

//Включаем курсор и ожидаем, пока пользователь нажмет клавишу

rg.x.ax=1;

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

printf("Mouse cursor on. Press any key\n");

getch();

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

rg.x.ax=2;

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

printf("Mouse cursor off. Press any key\n");

getch();

return 0;

}

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

#include<dos.h>

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

union REGS rg;