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

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

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

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

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

0 - левая;

1 - правая;

2 - средняя.

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

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

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

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

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

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

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

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

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

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

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

/**

*.Name ms_querr

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

*

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

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

* заданной клавиши.

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

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

*

* typedef struct _MOUSE_STATE_ {

* unsigned bottoms;

* unsigned x;

* unsigned y;

* } MOUSE_STATE;

*

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

* параметра.

*

*.Proto int ms_querr(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_querr(MOUSE_STATE *state, int bottom) {

reg.x.ax = 6;

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);

}

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

#include <dos.h>

#include <stdio.h>

#include <conio.h>

#include "sysp.h"

union REGS reg;

void main() {

int botm, i;

MOUSE_STATE state;

unsigned old_videomode, new_videomode;

char buf[20], *bufptr;

// Определяем текущий видеорежим

reg.x.ax = 0x0f00;

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

old_videomode = reg.h.al;

// Устанавливаем новый видеорежим:

// Устанавливаем максимально допустимую длину строки

buf[0] = 10;

printf("nВведите десятичный номер видеорежима: ");

bufptr = cgets(buf);

// Преобразуем введенное число к формату int

new_videomode = atoi(bufptr);

reg.h.ah = 0;

reg.h.al = new_videomode;

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

// Инициализируем мышь, определяем количество клавиш

if(!ms_init(&botm)) {

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

exit(-1);

}

printf("nУстановлена мышь: ");

switch (botm) {

case 2:

printf("двухклавишная"); break;

case 3:

printf("трехклавишная, системы Mouse Systems");

break;

case 0:

default:

printf("неизвестной системы"); break;

}

printf("nnСостояние мыши:nn");

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

ms_on();

while(!kbhit()) {

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

i = ms_querp(&state, 0);

// Если были нажатия на левую клавишу, выводим состояние мыши

if(i != 0) {

// Перед выводом на экран отключаем курсор, затем включаем его

// снова.

ms_off();

printf("Нажатие: %2d x:%5d y:%5dn",

state.bottoms,

state.x,

state.y);

ms_on();

}

// Выводим состояние при отпускании клавиши

i = ms_querr(&state, 0);

if(i != 0) {

ms_off();

printf("Отпускание: %2d x:%5d y:%5dnn",

state.bottoms,

state.x,

state.y);

ms_on();

}

}

getch();

ms_off();

reg.h.ah = 0;

reg.h.al = old_videomode;

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

}

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