[an error occurred while processing this directive]
Ответ: (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено GPP 21 октября 2005 г. 18:15
В ответ на: RTC::TMenuItem __flash MenuRTC[] - это что такое ? В RTC объявлен только объявлен TMenuItem __flash *p. - пляшите от него. А еще лучше vector (+) отправлено DASM 21 октября 2005 г. 16:24

хочу сделать многоуровневое меню. За основу беру вот этот текст:

#include

#define NULL 0

typedef __flash struct _TMenuItem
{
__flash char *Caption; //название пункта меню
int (*Exec)(void *); //функция, вызываемая при выборе
int (*Exit)(void *); //функция, вызываемая при выходе
__flash struct _TMenuItem *Next; //следующее меню
__flash struct _TMenuItem *Prev; //предыдущее меню
} TMenuItem;

extern flash TMenuItem SubMenu1[];

// Сами менюшки.
flash TMenuItem SubSubSubMenu1[]=
{
{"MAIN1",NULL,NULL,SubMenu1},
{"MAIN2",NULL,NULL},
{"MAIN3",NULL,NULL},
{"MAIN4",NULL,NULL},
{"MAIN5",NULL,NULL},
{"MAIN6",NULL,NULL},
{"MAIN7",NULL,NULL},
{"MAIN8",NULL,NULL},
{NULL,NULL,NULL}
};

flash TMenuItem SubSubMenu2[]=
{
{"SUBSUB11",NULL,SubSubSubMenu1},
{"SUBSUB12",NULL,NULL},
{"SUBSUB13",NULL,NULL},
{"SUBSUB14",NULL,NULL},
{"SUBSUB15",NULL,NULL},
{"SUBSUB16",NULL,NULL},
{NULL,NULL,NULL}
};

flash TMenuItem SubSubMenu1[]=
{
{"SUBSUB01",NULL,NULL},
{"SUBSUB02",NULL,NULL},
{"SUBSUB03",NULL,NULL},
{"SUBSUB04",NULL,NULL},
{"SUBSUB05",NULL,NULL},
{"SUBSUB06",NULL,NULL},
{NULL,NULL,NULL}
};

flash TMenuItem SubMenu1[]=
{
{"SUB1",NULL,SubSubMenu1},
{"SUB2",NULL,SubSubMenu2},
{"SUB3",NULL,NULL},
{"SUB4",NULL,NULL},
{"SUB5",NULL,NULL},
{"SUB6",NULL,NULL},
{NULL,NULL,NULL}
};

flash TMenuItem MainMenu[]=
{
{"MAIN1",NULL,NULL,SubMenu1},
{"MAIN2",NULL,NULL},
{"MAIN3",NULL,NULL},
{"MAIN4",NULL,NULL},
{"MAIN5",NULL,NULL},
{"MAIN6",NULL,NULL},
{"MAIN7",NULL,NULL},
{"MAIN8",NULL,NULL},
{NULL,NULL,NULL}
};

// При входе в меню вызываем эту функцию с указателем на MainMenu
void show_menu(flash TMenuItem *pCurMenu)
{
flash TMenuItem *p;
unsigned char cKey; // Нажатая кнопка.

p = pCurMenu;
lcd_printf("%s", p->Caption); // Вывод на lcd.
for(;;)
{
if (data_in_keyb_buf())
{ // В буфере клавиатуры есть данные.
cKey = keyb_buf_get_char();
if (cKey == KEY_ENTER)
{ // В подменю.
lcd_clr();
if (p->Next) show_menu(p->Next);
lcd_printf("%s", p->Caption);
if (p->Exec()) p->Exec(); // Вызовем функцию при выборе.
}
if (cKey == KEY_ESC)
{ // В предыдущий уровень.
lcd_clr();
if (pCurMenu == MainMenu)
{ // Выход только из главного меню.
lcd_clr();
// Вставить если надо проверку на выход из меню.
}
return;
}
if (cKey == KEY_UP_ARROW)
{ // Вверх.
lcd_clr();
if(p != pCurMenu) p--;
else
{ // Поиск последней менюшки.
while (p->Caption) p++;
p--;
}
lcd_printf("%s", p->Caption);
}
if (cKey == KEY_DOWN_ARROW)
{ // Вниз.
lcd_clr();
p++;
if(!p->Caption) p = pCurMenu;
lcd_printf("%s", p->Caption);
}
}
}
}

а положить его на С++ не могу. Читаю описание языка - вроде все понятно, а реализовать не могу.

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru