Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Управление программой с помощью клавиатуры




Вопросы для самопроверки

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

Дополнительные функции

Пиксели

unsigned getpixel ( int x, int y); Возвращает цвет пикселя с заданными координатами.

void putpixel ( int x, int y, int color); Рисует пиксель цветом color в точке (x, y).

void sound ( unsigned frequency); Включить звук(частота в гц).

void nosound ( void ); Выключить звук.

void delay (unsigned time); Задержка выполнения в миллисек.

void sleep ( unsigned lag); Задержка выполнения в сек.

Прототипы в файле dos.h

Данные функции не относятся к библиотеке graphics. Они приводятся в этом разделе, чтобы программист имел возможность включить звук в проектирование интерфейса.

1. Как перейти в графический режим?

2. Укажите размер экрана и начальные координаты курсора в текстовом и графическом режимах соответственно.

Контрольные вопросы

1. Что представляют собой файлы с расширением bgi?

2. Почему в графическом режиме используются битовые образы размером 8*8 пикселей?

Часто требуется после выполнения фрагмента программы дать возможность пользователю выбрать один из нескольких вариантов продолжения.

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

Клавиши, не имеющие графического изображения:

ß à PgUp PgDn Del End Home и т.п.

Каждая клавиша имеет расширенный код символа, занимающий 2 байта. Если в нем младший байт не равен 0, то в нем хранится ASCII -код символа, если он равен 0, то в старшем байте находится сканкод клавиши, характерный только для IBM PC. Все управляющие клавиши, кроме клавиш Esc, Tab, Enter имеют нулевой младший байт, поэтому приходится по-разному обрабатывать управляющие и обычные символы. Более того, для управления программой можно использовать сочетания клавиш типа: Shift + Tab, Alt + F1, Ctrl + F10 и т.п., которые имеют свои расширенные коды.

Байт 2 Байт 1

Расширенный код клавиатуры: Сканкод ASCII -код

Для чтения символов с клавиатуры без отображения на экран используются функции:

- getch (),

- int bioskey (in t cmd); à Прототип в файле bios.h.

Возможные значения параметра cmd ={0|1|2}. Если значение cmd равно 0, то функция возвращает расширенный код клавиатуры и удаляет его из буфера клавиатуры, если буфер пуст, то ожидает нажатие клавиши. Как работает функция bioskey с параметрами {1|2}, можно посмотрить в подсказке(help) среды Borland C++ 3.1.

Пример. Фрагмент реализации простейшего текстового редактора.

#include < bios.h >

#define LEFT 19200

#define RIGHT 19712

#define HOME 18176

#define END 20224

#define DEL 21248

#define ENTER 7181

...................

flin=1;

while (flin){

cod = bioskey (0);

switch (cod){

case ENTER: /* Конец ввода */

flin = 0; break;

case LEFT: /* Влево на 1 символ */

.......

break;

case RIGHT: /* Вправо на 1 символ */

.......

break;


case HOME: /* В начало строки */

.......

break;

case END: /* В конец строки */

.......

break;

case DEL: /* Удалить символ над курсором */

.......

break;

default: /* Ввод символа */

cod &= 0x00ff;

if (cod >= 040){ /* Нормальный символ */

.........

}

} /* End switch */

..........

} /* End while */

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

Те же манипуляции можно выполнить и с функцией getch (), только нужно дважды читать один и тот же расширенный код. Первое обращение к функции getch () читает младший байт буфера клавиатуры. Если он не равен 0, то следующее обращение к getch () будет вновь читать младший байт следующего символа, если же он равен 0, то следующее обращение прочтет старший байт буфера клавиатуры.

Пример.

cod1 = getch (); // Читаем младший байт

if (cod1 == 0){ // Читаем старший байт

cod2 = getch ();

}




Поделиться с друзьями:


Дата добавления: 2014-12-27; Просмотров: 477; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.