С для профессиональных программистов


Функции поддержки "мыши" верхнего уровня.


Используя функцию cmouses() вы можете создать набор функций языка Си высокого уровня, которые значительно облегчат вам программирование интерфейсов, ориентированных на использованием "мыши". Посмотрите, как это делается.

Установка "мыши" в исходное состояние.

Функция, представленная ниже, mouse_reset() используется для установки "мыши" в исходное состояние. Заметим, что функция требует наличия соответствующего программного обеспечения и аппаратной части компьютера, а также инсталяции двухклавишной "мыши".

/* Установка "мыши" в исходное состояние */

void mouse_reset()

int fnum, arg2, arg3, arg4;

fnum = 0;  /* Установка "мыши" в исходное состояние  */

cmouses( &fnum, &arg2, &arg3, &arg4);

if(fnum!=-1)

printf("Аппаратные или программные средства поддержки ");

printf("'мыши' не инсталированы");

exit(1);

if(arg2!=2)

printf("Разрешено использование только двухклавишной 'мыши'");

exit(1);



 

Отображение и перемещение курсора "мыши".

Взаимодополняющие друг друга функции cursor_on() и cursor_off(), представленные ниже, позволяют активизировать и деактивизировать изображение курсора на экране дисплея.

/*  Включение курсора "мыши"  */

void cursor_on()

int fnum;

fnum = 1; /* отобразить курсор */

cmouses( &fnum,  &fnum,  &fnum,  &fnum);

 

/*  Выключение курсора "мыши"  */

void cursor_off()

Какая из клавиш "мыши" была нажата?

Другой парой взаимодополняющих друг друга функций являются функции rightb_pressed() и leftb_pressed(), представленные ниже. Эти функции возвращают значение "истина", если нажата правая или левая клавиши.

/* Возвращает значение "истина", если нажата правая клавиша,

и "ложь" в противном случае                                                                                            */

rightb_pressed()


int fnum, arg2, arg3, arg4;

fnum = 3;   /* Чтение позиции и статуса клавиши */

cmouses( &fnum, &arg2, &arg3, &arg4);

return arg2 & 2;

 

/* Возвращает значение "истина", если нажата левая клавиша,

и "ложь" в противном случае                                                                                            */

leftb_pressed()

int fnum, arg2, arg3, arg4;

fnum = 3;   /* Чтение позиции и статуса клавиши */

cmouses( &fnum, &arg2, &arg3, &arg4);

return arg2 & 1;

 

Как обнаружить перемещение "мыши"?

Функция 11, которая возвращает изменение значения счетчика "мыши" (в "мышиных" шагах) после последнего обращения к ней, позволяет определить факт перемещения "мыши". Функция mouse_motion(), представленная ниже, возвращает изменение

местоположения    "мыши"    в   горизонтальном   и   вертикальном

направлениях в переменных,  чьи  указатели  являются  аргументами

функции.  Если  оба  значения  deltax  и deltay равны 0,  то факт

int fnum, arg2, arg3, arg4;

fnum = 11; /* получить направление движения */

cmouses( &fnum, &arg2, &arg3, &arg4);

if(arg3>0) *deltax = RIGHT;

else if(arg3<0) *deltax = LEFT;

Чтение и установка позиции курсора.

Функции set_mouse_position()                                    и                   mouse_position(),

представленные  ниже,  используются  для установки чтения текущей

позиции курсора "мыши".

/* Установить координаты курсора "мыши" */

void set_mouse_position(x, y)

int x, y;

int fnum, arg2;

fnum = 4; /* установка позиции */

cmouses(&fnum, &arg2, &x, &y);

int fnum, arg2, arg3, arg4;

fnum = 3; /* получить позицию и статус клавиши */

cmouses( &fnum, &arg2, &arg3, &arg4);

*x = arg3;

*y = arg4;


Содержание раздела