
- •Введение
- •1. Общие принципы создания интерфейса
- •1.1. Эргономические характеристики интерфейса
- •1.2. Составные части интерфейса
- •1.3. Виды диалога
- •1.4. Процессы ввода – вывода
- •1.5. Методы разработки подпрограмм нижнего уровня
- •Int int86(int num, union regs *inregs, union regs *outregs);
- •Void pokeb(unsigned seg, unsigned off, char value);
- •Int getch();
- •2. Исчезающее меню
- •2.1. Алгоритм создания исчезающего меню
- •2.2. Сохранение и восстановление экрана
- •2.3. Вывод меню и рамки
- •2.4. Определение выбора пользователя
- •2.5. Подпрограмма исчезающего меню
- •3. Иерархическое меню
- •3.1. Фреймы меню
- •3.2. Подпрограмма активизации меню
- •3.3. Организация иерархического меню
- •3.4. Всплывающие окна
- •Void window(int num);
- •Void deactivate(int num);
- •4. Графический интерфейс
- •4.1. Организация меню в графическом режиме
- •Void outtextxy ( int X, int y, char *s);
- •4.2. Организация графического диалога
- •4.3. Особенности графического режима
- •Void putpixel (int color, int X, int y)
- •4.4. Форматы хранения графических файлов
- •5. Прикладной интерфейс для windows
- •5.1. Приложения Windows
- •5.2. Каркас приложения
- •5.3. Обработка сообщений в системе Windows
- •Int ReleaseDc(hwnd hwnd, hdc hdc);
- •Int MessageBox(hwnd hwnd, lpcstr lpText, lpcstr lpCaption, uint wMbType);
- •Int response;
- •5.4. Меню в системе Windows
- •5.5. Диалоги в системе Windows
- •Int DialogBox(hinstance hThisInst,
- •5.6. Пример программы, использующей список и окно ввода
- •6. Лабораторная 1
- •Варианты заданий
- •Пример выполнения задания
- •7 Лабораторная 2
- •Варианты заданий
- •Пример выполнения задания
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); //стирает предшествующий символ