присоединяюсь к вопросу.
тоже только начал стряпать меню для своего устройства.
организовал страничное меню. (ничего не читал на эту тему, проосто придумал сам)
Код
/*
* страницы меню
* 16 символов :: "1234567890123456"
*/
const __flash byte str1_0[] = "*Введите пароль*"; // password menu
const __flash byte str2_0[] = " "; // MENU_PAGE_0
// кнопка "опции" - затемнена
const __flash byte str1_1[] = "**Слушаю эфир**"; // main menu
const __flash byte str2_1[] = "*Режим Опции*"; // MENU_PAGE_1
//...
//... объявление строк меню
//...
// далее описываем реакцию кнопок на определённой странице меню (кнопок у меня 3 - правая,
// левая и вернуться на пункт выше
void key_handle(byte key_num, byte page_num)
{
switch (page_num)
{
case MENU_PAGE_0 : // password menu
{
switch (key_num)
{
case KEY_1 :
{
// что-то делаем
} break; // KEY_1
case KEY_2 :
{
// что-то делаем
} break; // KEY_2
case KEY_BACK :
{
// что-то делаем
} break; // KEY_BACK
default : break;
} // switch (key_num)
} break; // MENU_PAGE_0
case MENU_PAGE_1 : // main menu -------------------------------
{
switch (key_num)
{
case KEY_1 :
{
menu_page = MENU_PAGE_1_1; // собственно вот так происходит обработка
draw_menu(menu_page);
} break; // KEY_1
case KEY_2 :
{
// grayed
} break; // KEY_2
case KEY_BACK :
{
// что-то делаем
} break; // KEY_BACK
default : break;
} // switch (key_num)
} break; // MENU_PAGE_1 ----------------------------------------------------
//...
//...
//...
// ну и собственно отрисовка строк меню на дисплее
void draw_menu(byte page_num)
{
switch (page_num)
{
case MENU_PAGE_0 : // password menu
{
LCD_PrintAt(0, 0, &str1_0[0]);
LCD_PrintAt(0, 1, &str2_0[0]);
} break;
case MENU_PAGE_1 : // main menu
{
LCD_PrintAt(0, 0, &str1_1[0]);
LCD_PrintAt(0, 1, &str2_1[0]);
} break;
//...
//...
//...
хотелось бы услышать мнение гуру в этом вопросе - как ПРАВИЛЬНО стряпать меню? для маленького проектика мне и такая организация подходит, а вот если что-то большое...
Сообщение отредактировал junoSynthesizer - Nov 15 2006, 22:04