Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МП 1,2.doc
Скачиваний:
11
Добавлен:
05.11.2018
Размер:
2.77 Mб
Скачать

3.4. Всплывающие окна

Современные диалоговые системы строятся на основе всплывающих окон. Всплывающим окном называется часть экрана, используемая для ввода и вывода текстовых и графических данных. Перед появлением всплывающего окна на экране текущее содержимое экрана сохраняется, а после его исчезновения содержимое экрана восстанавливается.

Разработка функций, управляющих всплывающими окнами, является сложной задачей из-за необходимости обеспечения запрета для прикладной программы осуществлять вывод за границы окна. Поскольку размеры окна могут изменяться без “сообщения” об этом прикладной программе, то именно функции управления окнами, а не прикладная программа, должны «предохранить» от выхода за границы окна. Следовательно, все обычные функции ввода и вывода для консоли должны быть заменены функциями, ориентированными на окна.

Всплывающие окна используются следующим образом. Каждая отдельная задача программы использует свое собственное окно. При запуске задачи активизируется и ее окно. При завершении работы задачи ее окно удаляется. Если же выполнение задачи прерывается, то окно остается активным, и на экран могут быть выведены окна других задач.

Для организации всплывающих окон используется та же идея, которая применялась при организации иерархического меню. Для каждого всплывающего окна определяется структура, которая содержит информацию о позиции и размерах окна, заголовок окна, указатель на область сохранения. Эта структура называется фреймом окна. Создается массив фреймов, количество элементов этого массива не больше числа окон, определенных в программе:

struct window_frame

{

int startx, starty, endx, endy; //позиция окна

int curx, cury; //текущая позиция курсора в окне

unsigned char *p; //указатель буфера сохранения

char *header; //заголовок (имя) окна

int border; //1 – рамка есть, 0 – рамки нет

int active; //1 – окно активно, 0 – неактивно

} frame [MAX_FRAME];

Для записи в окно используются специальные функции ввода и вывода, ориентированные на окна.

Для создания окна определяется функция

int make_window ( int num, //номер окна

char *header, //текст заголовка

int startx, int starty, //левый верхний угол

int endx, int endy, //правый нижний угол

int border); //присутствие рамки

функция возвращает единицу, если окно не может быть создано.

Окно активируется при помощи функции:

Void window(int num);

которая сохраняет область вывода, делает окно активным и выводит окно на экран.

Функция

Void deactivate(int num);

деактивирует окно.

В заключение приведём прототипы оконных функций ввода-вывода:

int window_xy(int num, intx, inty); //установка курсора в позицию (x,y)

int window_getche(int num); //аналогично getche()

void window_gets(int num, char *s); //чтение строки в s

int window_putchar(int num, char ch); //вывод символа

int window_puts(int num, char *str); //вывод строки

void window_cls(int num); //очистка окна

void window_cleol(int num); //очистка строки от текущей //позиции до конца строки

int window_upline(int num); //перемещает курсор на одну //строку вверх

int window_downline(int num); //перемещает курсор на одну //строку вниз

int window_bksp(int num); //стирает предшествующий символ

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]