Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

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



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

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

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

ß à 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 ();

}

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

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

1. Каков состав расширенного кода клавиатуры?

2. Как выделить из прочитанного расширенного кода содержимое младшего байта(ASCII -символ)?

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

1. В чем отличие процесса чтения расширенного кода функциями bioskey и getch?

2. Какую инструкцию удобно использовать для управления программой с помощью клавиатуры?

ЗАДАЧИ





Дата публикования: 2014-11-02; Прочитано: 416 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.013 с)...