Аппаратное обеспечение IBM PC



         

Определить положение курсора - часть 2


#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("\n\nСостояние мыши:\n\n");

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

ms_on();

while(!kbhit()) { ms_query(&state); printf("%2d x:%5d y:%5d", state.bottoms, state.x, state.y); for(i=0;i<18;i++) printf("\b"); } getch();

ms_off();

reg.h.ah = 0; reg.h.al = old_videomode; int86(0x10, &reg, &reg);

}

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

Немного позже мы рассмотрим другие способы определения состояния мыши.




Содержание  Назад  Вперед