|
попробую ответить. Хотя кратко может и не выйдет.
Смысл в том, что обработчик меню это одна подпрограмма,
выполняющая те или иные действия с текущим пунктом меню.
Все пункты меню имеют тип, согласно которого над
ним выполняется действо.(switch по типу)
Само меню может храниться где угодно, я храню во внешнем EEPROM.
структура меню следующая:+-----+------+----+----- --+-----+
| int | BYTE |BYTE|char[n] | int |
+-----+------+----+--------+-----+
|BaseC|bParID|TYPE| sName |iPntr|
+-----+------+----+--------+-----+
BP | | | | | |
>------- |WidId |ITEM|"16/9" | 0 |
| | | | |SUBL|"Звук" |(-xx)----+
| | | | |LIST|"Каналы"|(+xx)| |
| - | | | | | | |
| | | | | +--------------->
+---------------------------------------+ указатель на список
| | | | | | | каналов
+------ | |ITEM|"БАСЫ" | |
P1 | | | | | | | |
| | | | | | | |
| - | | | | |
+-----+------+----+--------+-----+
Вы входите в программу меню через точку BP. Вычитываете запись.
Индицируете название. Если нажат Enter обрабатывете запись по типу.
Если подменю, то как бы снова входите в туже программу(просто новая загрузка
и продолжить, но с другой точки входа. Возврат на уровень выше понятен.
Пройдя по кольцу до последнего элемента(это отрицательный индекс в поле
BaseC) Вы грузите предыдущую запись(это звук в примере).
И опять кнопками <> ходите по предыдущему уровню.
А выход из меню можно сделать когда угодно с любого уровня,
просто выйдя из программы.
Достоинства: написав примитивный транслятор, можно очень быстро добавлять или изменять меню. Вложенность не ограниченная.
Если что не понятно спрашивай.
Всего, Иван.
E-mail: info@telesys.ru