соответствии с которым строится пример использования оконного
редактора.
Функция notepad.c обрабатывает файл, имя которого определено
в массиве, описанном как external. В данном примере этот массив
определен в note.c, и имя файла указано как note.pad. Если такой
файл уже существует на момент запуска примера, то notepad.c
считывает его в буфер редактора.
Notepad.c устанавливает окно, заключает его в рамку,
присваивает окну название, назначает цвета для окна и отображает
его на экране дисплея. Затем notepad.c вызывает функцию оконного
редактора text_editor. По завершении работы функции text_editor
notepad.c уничтожает окно и сохраняет строки текста в буфере, в
который был записан последний нужный текст. Затем notepad.c
записывает содержимое буфера в файл (note.pad).
Листинг 9.2. note.c
/* ------ note.c ---------*/
#include "twindow.h"
void notepad(void);
char notefile [] = "note.pad";
main()
{
load_help("tcprogs.hlp");
notepad();
}
Листинг 9.3: notepad.c
/* ----------------- notepad.c -----------------*/
#include
#include
#include "twindow.h"
#define LWID 60
#define WHT 10
#define PADHT 20
char bf [PADHT] [LWID];
extern char notefile[];
void notepad()
{
WINDOW *wnd;
FILE *fp, *fopen();
int i, ctr = 0;
set_help("notepad ",0,0);
setmem(bf, sizeof bf, ' ');
if ((fp = fopen(notefile, "rt")) != NULL) {
while (fread(bf [ctr], LWID, 1, fp))
ctr++;
fclose(fp);
}
wnd = establish_window
((80-(LWID+2))/2, (25-(WHT+2))/2, WHT+2, LWID+2);
set_border(wnd, 3);
set_title(wnd, " Note Pad ");
set_colors(wnd, ALL, BLUE, AQUA, BRIGHT);
set_colors(wnd, ACCENT, WHITE, BLACK, DIM);
display_window(wnd);
text_editor(wnd, bf[0], (unsigned) LWID * PADHT);
delete_window(wnd);
ctr = PADHT;
while (--ctr) {
for (i = 0; i < LWID; i++)
if( bf [ctr] [i] != ' ')
break;
if (i < LWID)
break;
}
fp = fopen(notefile, "w");
for (i = 0; i < ctr+1; i++)
fwrite(bf[i], LWID, 1, fp);
fclose(fp);
}
Листинг 9.4 note.prj
note
notepad(twindow.h)
editor(twindow.h, keys.h)
thelp(twindow.h, keys.h)
twindow(twindow.h, keys.h)
ibmpc.obj
Для выполнения примера введите команду
C > note
После трансляции и редактирования ваших программ вы увидите
на экране дисплея копию рисунка 9.2. При первом запуске примера
файл note.pad будет пустым. После того, как вы введете с помощью
редактора какую-либо информацию, при выходе из редактора по
клавише или данные будут запомнены в файле note.pad
для дальнейшего использования. Естественно, что если вы запомнили
текст, то при следующем выполнении программы он будет вам
отображаться в окне редактора.
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬
¦ ¦
¦ ¦
¦ ¦
¦ ¦
¦ ¦
¦ ЪДДДДДДДДДДДДДДДД Note Pad ДДДДДДДДДДДДДД¬ ¦
¦ ¦The window notepad can be used to record ¦ ¦
¦ ¦random thoughts, appointments, reminders,¦ ¦
¦ ¦and daily activities._ ¦ ¦
¦ ¦ ¦ ¦
¦ ¦ ¦ ¦
¦ ¦ ¦ ¦
¦ АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ ¦
¦ ¦
¦ ¦
¦ ¦
¦ ¦
¦ ¦
¦ ¦
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Рис. 9.2 Пример использования редактора.
При вводе текста и его дальнейшей обработке используйте
перечень команд, отображенный на рисунке 9.1. Нажав клавишу ,
вы можете получить перечень этих команд на экране своего дисплея.
Резюме
-----------------------------------------------------------------
Итак, мы рассмотрели еще одну дополнительную возможность,
которая может быть добавлена в список библиотеки поддержки
оконной технологии. Таким образом, изученное вами на настоящий
момент программное обеспечение может использоваться как
функциональное средство поддержки специализированных задач,
ориентированных на использование оконной технологии. Программное
обеспечение позволяет организовать диалоговую help-поддержку,
шаблоны ввода данных, а также использовать оконный текстовый
редактор. Следующей дополнительной возможностью, которая может
вами с успехом применяться, является иерархическая система меню,
используемых в окне. Эта система меню включает в себя скользящее
меню-строку и систему появляющихся меню типа "pop-down" (этот тип
меню еще называют "всплывающим", так как его появление на экране
очень напоминает эффект всплытия из "глубины" дисплея) для выбора
и выполнения различных функций прикладной программой, в которой
система меню используется.
ГЛАВА 10
--------
Оконные меню
-----------------------------------------------------------------
Итак, сейчас вы уже можете адресовать область
пользовательского интерфейса интерактивной системы,
ссответствующую определенным операциям. Для ввода различных полей
данных - это средства поддержки формо-ориентированного ввода; для
ввода текста - это оконный текстовый редактор; для обеспечения
пользователей help-информацией по этим операциям - это контекстно
-зависимая help-система; для поддержки каждой из этих операций -
библиотека функций окна. Ранее мы с вами рассмотрели примеры
адресации области пользовательского интерфейса для случая, когда
прикладная программа использует только одну из операций. Однако
диалоговые системы обычно обеспечивают поддержку целого ряда
операций, которые может инициализировать пользователь. Выбор
конкретной операции, которую необходимо выполнить в данный
момент, чаще осуществляется пользователем интерактивной системы,
чем самой системой. Это связано с тем, что зачастую требуется
выбор из группы сложных независимых операций, а пользователь
всегда лучше знает, какая именно операция должна быть выполнена в
данный момент.
Меню
-----------------------------------------------------------------
Часто перечень возможностей системы отображается
пользователю в виде списка, из которого он может выбрать нужные
ему функции. Наиболее часто этот подход носит название меню.
Перечень выполняемых функций является одной из основных частей
пользовательского интерфейса системы и обсуждается далее.
Вы уже встречались с одним из видов меню в Главе 6 при
рассмотрении программы poetry.exe. Это меню содержало список
опций окна. Пользователь мог осуществлять выбор из этого меню
путем нажатия клавиш, соответствующих одной из опций меню, или
путем перемещения курсора по элементам меню и нажатия клавиши
<ВВОД> в позиции соответствующего элемента. Такой тип меню
является наиболее часто используемым в интерактивных системах, но
в то же время относится к разряду наиболее эффективных и
понимаемых пользователем приемов.
Другим популярным типом меню, который часто используется в
компьютерах, снабженных графическим пользовательским интерфейсом
и манипулятором типа "мышь", является меню в виде скользящей
строки (sliding bar menu). Этот тип меню представляет собой
горизонтальное меню, расположенное в верхней части, с
"всплывающими" вертикальными меню, раскрывающими и
конкретизирующими содержание выбранных из горизонтального меню
элементов. Вертикальные меню "всплывают" под соответствующими
элементами горизонтального меню, и после этого пользователь
получает возможность осуществлять выборку из вертикального меню,
перемещаясь по нему вверх и вниз. Примером такого меню может
служить система меню, принятая во Framework-II - широко
распространенном продукте фирмы Ashton Tate .
К преимуществам такого типа меню относится то, что оно
занимает минимальную область экрана (обычно - одна строка) и
наиболее полно отражает взгляд пользователя на конкретное
приложение программы. Вертикальные меню реализованы в виде
"всплывающих" окон. Вследствие того, что они лишь временно
перекрывают изображение на экране, не уничтожая его, применение
такого меню раскрывает новые перспективы в разработке диалоговых
систем. На рисунке 10.1 представлен пример именно такого меню.
Пользователи системы Borland's Superkey могут видоизменить это
меню.
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬
¦ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬¦
¦¦ Macros Commands Functions Options Defaults Encryption ¦¦
¦АДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДЩ¦
¦ ¦ Arrow keys OFF ¦ ¦
¦ ¦ Bottom line OFF ¦ ¦
¦ ¦ Command stack ON ¦ ¦
¦ ¦ Format fields OFF ¦ ¦
¦ ¦ Keyb. click OFF ¦ ¦
¦ ¦ One finger OFF ¦ ¦
¦ ¦ Playback delay 0 ¦ ¦
¦ ¦ proTect delay OFF ¦ ¦
¦ ¦ sUspend OFF ¦ ¦
¦ ¦ disk Wait OFF ¦ ¦
¦ ¦ Save optoins ¦ ¦
¦ АДДДДДДДДДДДДДДДДДДДДДДДДДЩ ¦
¦ ¦
¦ ¦
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Рис. 10.1 Пример меню
Процесс, образующий оконное меню
-----------------------------------------------------------------
В этой главе содержится вводная информация о
функциях-драйверах меню, которые используются для создания и
поддержки скользящего меню-строки, которое описано выше. Такое
меню создается как окно и управляется с помощью
последовательности управляющих таблиц, образующихся после
обращения к программе. Эти таблицы описывают последовательность
выборки в скользящем меню-строке и каждом из "всплывающих"
вертикальных меню. Функции-драйверы меню осуществляют
обслуживание основного (целевого) процесса выполнения вашей
программы. Они управляют пользовательским интерфейсом путем
контроля процесса отображения меню и ввода пользователем
выбранного элемента меню. Процесс ввода управляется набором
таблиц меню, которые кодируются в вашей программе.