В этой статье приводится обзор класса ChoiceT,
предназначенного для манипулирования меню под ОС ДОС.
Класс размещен в файлах Choice.h
и Choice.cpp. Для компиляции требуются также класс BearStringT
(be_str.h, be_str.cpp), манипулирующий текстовыми строками
и шаблонный класс BearListT<BearStringT> (be_list.h),
переопределенный в Choice.h как ListT. Эти классы также доступны
на сайте в разделе Downloads. В ближайшее время будут доступны
и их обзоры. На сайте доступен также архив с готовым проектом,
демонстрирующим всевозможные аспекты применения класса ChoiceT.
Декларация класса достаточно компактна:
typedef class ChoiceT{
ListT *List;
int Num,LastPos,Beg,Beg2, TextCol, ActBackCol, OldBackCol;
public:
ChoiceT(int ,...);
ChoiceT(ListT * inlist);
void SetAttr(int textCol, int actBackCol);
int Run(int);
~ChoiceT();
};
Возможны два принципиальных подхода к использованию
класса. Если количество пунктов в меню и их наименовани яизвестны
заранее, то можно использовать конструкции вида
ChoiceT Menu1(3,"First","Second","Third"),
*Menu2=new ChoiceT(2,"Point1","Point2");
В таких вызовах используется первая форма вызова
конструктора класса с переменным числом параметров, причем
первым параматром указывается число пунктов в формируемом
меню.
Если же возникает неоходимость построить меню
во время работы программы, то необходимо сперва динамически
построить список пунктов в виде экземпляра класса BearListT<BearStringT>,
который для удобства работы переопределен как ListT в файле
Choice.h. Затем при конструировании объекта меню надо передать
ему сформированный список, чтобы задействовать вторую форму
конструктора класса. Это выглядит примерно так:
ListT *TempList=new(ListT);
TempList->AddItemEnd(BearStringT("Point-1"));
TempList->AddItemEnd(BearStringT("Point-2"));
TempList->AddItemEnd(BearStringT("Point-3"));
NewMenu= new ChoiceT(TempList);
Итак, меню построено. Теперь надо его отобразить.
Возможны 3 вида отображения меню:
#define HorList 0 (пункты располагаются по горизонтали
рядом друг с другом)
#define VerList 1 (пункты располагаются по вертикали друг
под другом)
#define StrList 2 (пункты замещают друг друга, располагаясь
на одном и том же месте)
Для отображения вызывается функция int Run(int),
в качестве параметра принимающая одну из вышеописанных констант.
Возвращаемое значение - номер пункта меню, выбранного пользователем.
Для того, чтобы класс при работе не портил общий
интерфейс программы , в которую он встроен, есть возможность
настроить используемые им цвета в соответствии с желанием
пользователя. По умолчанию активный пункт меню подсвечивается
синим цветом фона, а текст имеет красный цвет. Но Эти настройки
можно изменить, вызвав функцию void SetAttr(int textCol, int
actBackCol), где первый параметр - цвет текста, второй - цвет
подсветки активного пункта меню.
В любом случае выбора параметров отображения
меню запоминает цвет фона, поверх которого оно отображается
и при переключении между пунктами меню корректно восстанавливает
фон, бывший там до активации пункта меню.(наверх)
©Bear
Labs, Inc. 2001, All Rights Reserved.
|