case 'c': forefront(wndC);
break;
case 'A': rear_window(wndA);
break;
case 'B': rear_window(wndB);
break;
case 'C': rear_window(wndC);
break;
default: break;
}
} while (c != ESC);
delete_window(wndA);
get_char();
delete_window(wndC);
get_char();
delete_window(wndB);
}
Листинг 6.8: prom.prj
prom
promote (twindow.h, keys.h)
twindow (twindow.h, keys.h)
ibmpc.obj
Назначение заголовков и изменение цветов окна
---------------------------------------------
Когда окно создано, вы можете назначить ему заголовок, а
также установить цвета переднего плана и фона.
Программа, иллюстрирующая заголовки и цвета окон, приведена
в листингах 6.9, 6.10 и 6.11. Листинг 6.9 является маленькой
управляющей программой, а листинг 6.11 - проектным make-файлом.
Обращайтесь к листингу 6.10, ccolor.c, при чтении данных
разъяснений.
Для запуска примера вводите следующую команду
c>color
Снова выдается три окна. Каждое из них имеет свой цвет (если
у вас цветной монитор), но ни у одного из них нет заголовка. Окна
расположены в тех же местах и имеют те же размеры, что и в
предыдущих примерах. Программа ожидает нажатия клавиши с одной из
букв: r, g или b. Она будет использовать эти буквы для изменения
заголовка среднего окна на "RED", "GREEN" или "BLUE", а также
изменит цвет среднего окна на соответствующий новому заголовку.
Рисунок 6.6 показывает экран после выбора алого (red) окна.
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬
¦ ¦
¦ C> ¦
¦ ¦
¦ ¦
¦ ¦
¦ ЪДДДДДДДREDДДДДДДД¬ ¦
¦ ¦ ¦ ¦
¦ ЪДДДДґ ¦ ¦
¦ ¦ ¦ ¦ ¦
¦ ¦ ¦ ЪДДДДДДДДД¬ ¦ ¦
¦ ¦ ¦ ¦ ¦ ¦ ¦
¦ ¦ АДДДґ ГДДДЩ ¦
¦ ¦ ¦ ¦ ¦
¦ АДДДДДДДДґ ¦ ¦
¦ АДДДДДДДДДЩ ¦
¦ ¦
¦ ¦
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Рисунок 6.6. Изменение цветов и заголовков.
Нажмите клавишу <Ключ> для выхода и уничтожения окна, а
также любые две другие клавиши для уничтожения двух остальных
окон и завершения программы.
Листинг 6.9: color.c
/* color.c */
void ccolor(void);
main()
{
ccolor();
}
Листинг 6.10: сcolor.c
/* ccolor.c */
#include "twindow.h"
#include "keys.h"
void ccolor()
{
WINDOW *wndA, *wndB, *wndC;
int c;
wndA = establish_window(8, 8, 9, 19);
wndB = establish_window(13, 6, 9, 20);
wndC = establish_window(16, 11, 9, 12);
set_colors(wndA, ALL, RED, YELLOW, BRIGHT);
set_colors(wndB, ALL, AQUA, YELLOW, BRIGHT);
set_colors(wndC, ALL, WHITE, YELLOW, BRIGHT);
display_window(wndA);
display_window(wndB);
display_window(wndC);
do {
c = get_char();
switch (c) {
case 'r':
set_title(wndB, " RED ");
set_colors(wndB, ALL, RED, WHITE, BRIGHT);
break;
case 'b':
set_title(wndB, " BLUE ");
set_colors(wndB, ALL, BLUE, WHITE, BRIGHT);
break;
case 'g':
set_title(wndB, " GREEN ");
set_colors(wndB, ALL, GREEN, WHITE, BRIGHT);
break;
default:
break;
}
} while (c != ESC);
delete_window(wndA);
get_char();
delete_window(wndC);
get_char();
delete_window(wndB);
}
Листинг 6.11: color.prj
color
ccolor (twindow.h, keys.h)
twindow (twindow.h, keys.h)
ibmpc.obj
Сравнение стековых и слоеных окон
---------------------------------
Рассматриваемая здесь программа дает возможность сравнить
представления стековых и слоеных окон. Вы можете откомпилировать
ее с оконной библиотекой, которая была компилирована для обоих
типов окон.
Программа, иллюстрирующая различия между стековыми и
слоеными окнами, показана на листингах 6.12, 6.13 и 6.14. Листинг
6.12 является маленькой управляющей программой, а листинг 6.14 -
проектным make-файлом. Обращайтесь к листингу 6.13, fast.c, при
чтении данных разъяснений.
Для запуска примера введите следующую команду:
c>fast
Помните, что программа сама по себе не показывает сравнение.
Вам необходимо построить две версии ее, одну - со стековой
оконной библиотекой, а вторую - со слоеной оконной библиотекой, и
сравнить представления обеих программ.
После запуска программы она создаст и выдаст пятнадцать окон
в последовательности, показанной на рисунке 6.7. Когда вы
нажимаете любую клавишу, программа уничтожает каждое окно в
обратном порядке. Вы можете сравнить соответствующие скорости
работы программ, компилированных в двух средах.
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬
¦ ЪДДДДДДДДДДДДДД¬ ¦
¦ ¦ ЪДДДДДДДДДДДДДДД¬ ¦
¦ ¦ ¦ ЪДДДДДДДДДДДДДДД¬ ¦
¦ ¦ ¦ ¦ ЪДДДДДДДДДДДДДДД¬ ¦
¦ АД¦ ¦ ¦ ЪДДДДДДДДДДДДДДД¬ ¦
¦ АД¦ ¦ ¦ ЪДДДДДДДДДДДДДДД¬ ¦
¦ АД¦ ¦ ¦ ЪДДДДДДДДДДДДДДД¬ ¦
¦ АД¦ ¦ ¦ ЪДДДДДДДДДДДДДДД¬ ¦
¦ АД¦ ¦ ¦ ЪДДДДДДДДДДДДДДДД¬ ¦
¦ АД¦ ¦ ¦ ЪДДДДДДДДДДДДДДДДД¬ ¦
¦ АД¦ ¦ ¦ ЪДДДДДДДДДДДДДДДДДД¬ ¦
¦ АД¦ ¦ ¦ ЪДДДДДДДДДДДДДДДДДДД¬ ¦
¦ АД¦ ¦ ¦ ЪДДДДДДДДДДДДДДДДДДД¬ ¦
¦ АД¦ ¦ ¦ ЪДДДДДДДДДДДДДДДДДДД¬ ¦
¦ АД¦ ¦ ¦ ЪДДДДДДДДДДДДДДДДДДД¬ ¦
¦ АД¦ ¦ ¦ ¦ ¦
¦ АД¦ ¦ Hello, Dolly # 14 ¦ ¦
¦ АД¦ ¦ ¦
¦ АДДДДДДДДДДДДДДДДДДДЩ ¦
¦ ¦
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Рисунок 6.7. Сравнение стековых и слоеных окон.
Листинг 6.12: fast.c
/* fast.c */
void fasttest(void);
main()
{
fasttest();
}
Листинг 6.13: fasttest.c
/* fasttest.c */
#include
#include "twindow.h"
void fasttest()
{
int row, col;
for (row = 0, col = 0; col < 15; row += 3, col++) {
establish_window(row, col, 10, 30);
set_colors(NULL, ALL, RED, YELLOW, BRIGHT);
display_window(NULL);
wprintf(NULL, "\n\n\n Hello, Dolly # %d", col);
}
get_char();
while (col--)
delete_window(NULL);
}
Листинг 6.14: fast.prj
fast
fasttest (twindow.h)
twindow (twindow.h, keys.h)
ibm.obj
Перемещение, подъем, скрытие окон, меню, изменение интенсивности
----------------------------------------------------------------
В следующем примере комбинируется несколько уже показанных
возможностей и даются примеры еще двух возможностей:
использование get_selection для обработки простого меню и
использование set_intensity для изменения яркости переднего плана
окон.
Программа, иллюстрирующая эти возможности, представлена на
листингах 6.15, 6.16 и 6.17. Листинг 6.15 является маленькой
управляющей программой, а листинг 6.17 - проектным make-файлом.
Обращайтесь к листингу 6.16, poems.c, при чтении данных
разъяснений.
Для запуска примера введите следующую команду:
c>poetry
Эта программа выдает пять различных стихотворений на экран и
позволяет вам выбрать одно из них, перемещать его, поднять его на
передний план, опустить его назад и уничтожить. Программа
начинает работу с выдачи оконного меню, которое перечисляет все
стихотворения. Вы можете переместить курсор вверх или вниз и
выбрать одно стихотворение нажатием клавиши <Ввод>. Вы также
можете нажать одну из цифр от 1 до 5, выбирая номер
стихотворения. В результате будет показано выбранное
стихотворение. На рисунке 6.8 показано меню стихотворений.
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬
¦ ¦
¦ ЪДДДДДДДДДДДДДДДДДД Select A PoemДДДДДДДДДДДД¬ ¦
¦ ¦ ¦ ¦
¦ ¦ 1: TELL ALL THE TRUTH BUT TELL IT SLANT ¦ ¦
¦ ¦ 2: AFTER LONG SILENSE ¦ ¦
¦ ¦ 3: A MAN SAID TO THE UNIVERSE ¦ ¦
¦ ¦ 4: FLYING CROOKED ¦ ¦
¦ ¦ 5: THE IDLE LIFE I LEAD ¦ ¦
¦ ¦ ¦ ¦
¦ АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ ¦
¦ ¦
¦ ¦
¦ ¦
¦ ¦
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Рисунок 6.8. Меню стихотворений.
После выбора стихотворения вы можете передвинуть его
клавишами со стрелками, возвращаясь к меню нажатием клавиши
<Ключ> или выбирая другое стихотворение нажатием соответствующей
цифровой клавиши. Выбранное текущее стихотворение выдается с
повышенной яркостью, а все остальные - с обычной. Если вы
выбираете стихотворение, выданное с обычной яркостью, то оно
становится ярким, а остальные - обычными. Для перевода
стихотворения на передний план нажмите клавишу <Плюс> (+); для
посылки его на фон нажмите клавишу <Минус> (-). Для уничтожения
текущего стихотворения нажмите клавишу <Удл>. Вы можете
восстановить его нажатием клавиши с номером. После этого нажмите
клавишу <Ключ> для возврата к меню, а затем снова клавишу <Ключ>
для выхода из программы.
На рисунке 6.9 показаны стихотворения, разбросанные по
экрану в различных местах.
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД...
¦ Ъ 1: TELL ALL THE TRUTH BUT TELL IT...
¦ C> ¦
¦ ¦ Tell all the truth but tell it sl...
¦ ¦
¦ ЪДДДДДДДДД 2: AFTER LONG SILENCE ДДДДДДДДД¬t lies
¦ ¦ ¦r infirm Delight
¦ ¦Speesh after long silense; it is right, ¦b surprise
¦ ¦All other lovers being estranged or dead ¦ ЪДДД 5: THE IDLE...
¦ ¦Unfriendly lamplight hid under its shade,¦h¦
¦ ¦The curtaiЪДДДДДДДД 4: FLYING CROOKED ДДДД ¦The idle life I...