ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
21 апреля
353663 Топик полностью
mr-x (11.09.2012 10:35, просмотров: 83) ответил mazur на Какие могут быть идеи, способы?
На сях сговнякал меню на вот такой структуре: struct t_m_line { const unsigned char * str; // Указатель на строку struct t_m_line *child[4]; // Массив указателей на потомков unsigned char type; // Тип элемента unsigned char level; // Уровень ветки unsigned char x; // Параметр unsigned char min, max; // Мин и макс. значения параметра unsigned int X; // Координата X всяких значков типа чекбоксов, радиобатонов char pict; // Пиктограмма }; Каждый элемент меню представлен этой структуой. Поля: str - текст, соответствующий этому элементу меню child[] - указывает на потомков - элементы подменю следующего уровня, размер массива определяет максимальное кол-во элементов на одном уровне меню type - тип элемента из примерно такого набора: type_text - Просто строка текста type_branch - Ветка type_CheckBox - Лист с CheckBox type_RadioButton - Лист с RadioButton type_unsig - Лист с числом без знака type_sig - Лист с числом со знаком type_exit - Выход type_back - Назад и т.п. level - уровень ветки, используется для переходов "вверх", если type == type_branch, а одним из потомков указан родитель x - некий числовой параметр, например состояние чекбокса и т.д. min, max - границы параметра x, в которых он может меняться X - используется для наведения красоты путем выравнивания значков, соответствующих элементам меню pict - пиктограмма Для любого элемента обязательны str и type, остальное варируется в зависимости от типа элемента Собственно структура меню задается описанием каждого из его элементов, примерно так: Главное меню: struct t_m_line main_m = {.type = type_branch, .level = 0, .child = {&ind_m, &sound_m, &measuring_m, &exit_m}}; Ветка главного меню: struct t_m_line ind_m = {.type = type_branch, .level = 1, .str = ind_str, .child = {&trace_m, &probe_m, &bright_m, &main_m}}; Следующее вложение: struct t_m_line bright_m = {.type = type_unsig, .str = bright_str, .min = min_bright, .max = max_bright, .X = 190}; Ещё всякие другие примеры: struct t_m_line tone_m = {.type = type_RadioButton, .str = tone_str, .x = 1, .X = 180}; struct t_m_line auto_m = {.type = type_CheckBox, .str = auto_str, .X = 259}; struct t_m_line back_m = {.type = type_back, .str = back_str}; Память под меню можно немного сэкономить, если некоторые поля структуры t_m_line засунуть в union. Я заморачиваться не стал.