Данный виджет позволяет создавать двухуровневое меню, которое может располагаться снизу или сверху экрана.
Создание виджета. Возращает ссылку на созданный виджет или 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; }