Скачиваний:
127
Добавлен:
02.05.2014
Размер:
403.46 Кб
Скачать

3.3.5. Установить курсор

На входе: AX = 0004h;

CX = устанавливаемая координата X

(по горизонтали);

DX = устанавливаемая координата Y

(по вертикали).

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

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

Если программа пытается установить курсор в область, где курсор невидим (эта область задается функцией 10h), то она сможет это сделать. Курсор при этом исчезнет с экрана, что не всегда желательно.

Если при помощи функций 07h или 08h область для перемещения курсора была ограничена, то при попытке установить курсор за границу этой области, он будет установлен в точку, которая находится внутри границы и находится на минимальном расстоянии от точки, заданной при вызове функции.

Функция для установки курсора:

/**

*.Name ms_setcr

*.Title Установка курсора в заданную точку

*

*.Descr Эта функция выполняет установку курсора мыши

* в точку, заданную координатами X и Y.

*

*.Proto void ms_setcr(int x, int y)

*

*.Params int x - горизонтальная координата курсора;

* int y - вертикальная координата курсора.

*

*.Return Ничего

*

*.Sample ms_samp2.c

**/

#include <dos.h>

#include <conio.h>

union REGS reg;

void ms_setcr(int x, int y) {

reg.x.ax = 4;

reg.x.cx = x;

reg.x.dx = y;

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

}

Приведем пример простой программы, которая устанавливает курсор в левый верхний угол экрана:

#include <stdio.h>

#include <conio.h>

#include "sysp.h"

void main() {

int botm;

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

if(!ms_init(&botm)) {

printf("nМышь не установлена");

exit(-1);

}

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

printf("nnКурсор мыши включен, "

"для выключения нажмите любую клавишу");

ms_on();

// Устанавливаем курсор в левый верхний угол экрана

ms_setcr(0,0);

getch();

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

ms_off();

}

3.3.6. Определить положение курсора при нажатии клавиши

На входе: AX = 0005h;

BX = клавиша, при нажатии которой

запоминается состояние мыши:

0 - левая;

1 - правая;

2 - средняя.

На выходе: AX = состояние клавиш мыши:

бит 0 = 1 - нажата левая клавиша;

бит 1 = 1 - нажата правая клавиша;

бит 2 = 1 - нажата средняя клавиша

(для мыши системы Mouse Systems);

BX = количество нажатий на заданную

клавишу, обнуляется после вызова функции;

CX = координата X (по горизонтали);

DX = координата Y (по вертикали).

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

Функция для определения состояния мыши при нажатии на заданную клавишу:

/**

*.Name ms_querp

*.Title Определение состояния мыши при нажатии на клавишу

*

*.Descr Эта функция определяет координаты курсора мыши

* и состояние клавиш в момент нажатия на заранее

* заданную клавишу.

* Определенное состояние записывается в структуру

* MOUSE_STATE, описанную в файле sysp.h:

*

* typedef struct _MOUSE_STATE_ {

* unsigned bottoms;

* unsigned x;

* unsigned y;

* } MOUSE_STATE;

*

* Адрес структуры передается функции в качестве

* параметра.

*

*.Proto int ms_querp(MOUSE_STATE *state, int bottom);

*

*.Params MOUSE_STATE *state - указатель на структуру,

* описывающую состояние мыши.

*

* int bottom - параметр определяет клавишу,

* при нажатии на которую необходимо

* запомнить состояние:

* 0 - левая клавиша,

* 1 - правая клавиша,

* 2 - средняя клавиша.

*

*.Return Функция возвращает количество нажатий на

* заданную клавишу с момента последнего

* вызова этой функции.

*

*.Sample ms_samp3.c

**/

#include <stdio.h>

#include <dos.h>

#include <conio.h>

#include "sysp.h"

union REGS reg;

int ms_querp(MOUSE_STATE *state, int bottom) {

reg.x.ax = 5;

reg.x.bx = bottom;

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

state->bottoms = reg.x.ax;

state->x = reg.x.cx;

state->y = reg.x.dx;

return(reg.x.bx);

}

Соседние файлы в папке input_devices