Данный виджет позволяет создавать двухуровневое меню, которое может располагаться снизу или сверху экрана.
Создание виджета. Возращает ссылку на созданный виджет или NULL, если создать не удалось.
В остальных функциях в качестве menu нужно передавать ссылку на созданный виджет.
CDKMENU *newCDKMenu (CDKSCREEN *cdkscreen, char *menulist[MAX_MENU_ITEMS][MAX_SUB_ITEMS], int menuListLength,
int *submenuListLength, int *menuLocation, int menuPos, chtype titleAttribute, chtype subtitleAttribute);
Уничтожение виджета.
void destroyCDKMenu (CDKMENU *menu);
Удаление виджета с экрана. (Сам виджет не удаляется.)
void eraseCDKMenu (CDKMENU *menu);
Установика атрибутов фона виджета attribute.
void setCDKMenuBackgroundAttrib (CDKMENU *menu, chtype attribute);
Прорисовка виджета.
void drawCDKMenu (CDKMENU *menu, boolean box);
Активирует виджет. Возвращаемое значение содержит выбранный пункт и подпункт меню.
Корневой пункт меню целая часть от деления возвращаемого значения на 100.
Подпункт меню остаток часть от деления возвращаемого значения на 100.
Если menu->exitType равно vNORMAL при выборе подпункта меню и vESCAPE_HIT при нажатии Esc
В качестве actions можно передать 0.
int activateCDKMenu (CDKMENU *menu,chtype * actions);
Получение номера корневого пункта меню menuItem и номера подпункта меню submenuItem.
void getCDKMenuCurrentItem (CDKMENU *menu, int *menuItem, int *submenuItem);
Установка номера корневого пункта меню menuItem и номера подпункта меню submenuItem.
void setCDKMenuCurrentItem (CDKMENU *menu, int menuItem, int submenuItem);
Установка состояния виджета.
void setCDKMenu (CDKMENU *menu, int menuItem, int submenuItem, chtype titleAttribute, chtype subtitleAttribute);
/*
w_menu.c - пример простой программы демонстрирующей
возможности виджета Menu библиотеки CDK.
Выход осуществляется по клавише Esc или
выбором пункта меню Файл->Выход.
(C) Copyright 2006 Бердников Александр alexber220@yandex.ru
Данная программа распростаняется по лицензии BSD.
*/
#include <cdk.h>
static char *menulist[MAX_MENU_ITEMS][MAX_SUB_ITEMS];
int main(int argc, char *argv[])
{
CDKSCREEN *cdkscreen;
CDKMENU *menu;
WINDOW *screen;
int submenusize[3], menuloc[4];
int selection;
// инициализация
screen = initscr();
cdkscreen = initCDKScreen(screen);
initCDKColor();
//определяем пункты меню
menulist[0][0] = "Файл"; menulist[1][0] = "Редактирование";
menulist[2][0] = "Помощь";
menulist[0][1] = "Открыть"; menulist[1][1] = "Вырезать ";
menulist[2][1] = "О программе";
menulist[0][2] = "Сохранить"; menulist[1][2] = "Скопировать";
menulist[0][3] = "Выход"; menulist[1][3] = "Вставить";
//задаём количество пунктов с подпунктами
//и позицию каждого корневого пункта меню
submenusize[0] = 4; menuloc[0] = LEFT;
submenusize[1] = 4; menuloc[1] = LEFT;
submenusize[2] = 2; menuloc[2] = RIGHT;
//создаём виджет типа меню
menu = newCDKMenu(cdkscreen, menulist, 3, submenusize, menuloc,
TOP, A_REVERSE, A_REVERSE);
while (1)
{
//обновляем экран
refreshCDKScreen (cdkscreen);
//даём пользователю возможность выбрать пункт меню
selection = activateCDKMenu (menu, 0);
if (menu->exitType == vESCAPE_HIT)// если нажата Esc
break;
else if ((menu->exitType == vNORMAL)// или выбран
&& (selection%100 == 2) // третий (считается от 0) подпункт
&& (selection/100 == 0)) // первого корневого пункта меню
break;
}
//освобождаем ресурсы
destroyCDKMenu(menu);
destroyCDKScreen(cdkscreen);
endCDK();
return 0;
}