Стандартна система текстового РК-меню


10

Чи є там шаблон для простої системи меню на С для текстового РК. Мені здається, що я переписую код для обробки простих текстових РК-меню.

Я вважаю, що у більшості систем є головне меню та деякі підменю, які при виборі дозволяють встановлювати параметр із деяким мінімальним та максимальним значенням.

В ідеалі цією системою меню можна користуватися 4 простими клавішами, такими як введення, скасування, вгору та вниз.

У своїй програмі я використовую текстовий РК з двома рядками x 16 символів, хоча ідеальне рішення має бути застосовано до будь-якого дисплея NxM.


Нічого спільного з електронним дизайном! Питання буде закритим.
Леон Хеллер

5
Я опинився під питаннями програмування вражень, якщо вони застосовуватимуться до вбудованих систем і тут можуть бути задані. Можливо, я помилився ...
mjh2007

Я теж був під подібним враженням. Чи є офіційна примітка про це?
AndrejaKo

Лише дуже низький рівень, відповідно до FAQ. Це питання стосується інтерфейсу користувача.
Леон Хеллер

3
+1 Мені теж було б цікаво ... Я завжди їх заготовляв вручну. Ви використовуєте консольний вихід або дисплей символів NxM .... не те, що я маю відповідь на будь-який :) У кількох вбудованих системах дисплея 2xN я реалізував два інтерфейси кнопок, що поєднують Enter / Cancel і мають Next, який є кільцевий буфер і виключає потребу вгору / вперед та вниз / назад.
kenny

Відповіді:


5

Шаблон, який я використовую для систем меню в С, є приблизно таким:

struct menuitem
{
  const char *name; // name to be rendered
  functionPointer handlerFunc; // handler for this leaf node (optionally NULL)
  struct menu *child; // pointer to child submenu (optionally NULL)
};

struct menu
{
  struct menu *parent; // pointer to parent menu
  struct **menuitem; // array of menu items, NULL terminated
};

Потім я оголошую масив menus, кожен з яких містить menuitems та покажчики на childпідменю. Вгору та вниз рухається через поточно вибраний масив menuitems. Назад переміщується до parentменю та вперед / вибирає або переміщення до childпідменю, або виклик а handlerFuncдля аркуша аркуша.

Відображення меню просто включає в себе повторення через його пункти.

Перевага цієї схеми полягає в тому, що вона повністю керована даними, структури меню можуть статично оголошуватися в ПЗУ незалежно від функцій візуалізації та обробника.


2

Відповідь Тобі - дуже хороший вихідний пункт. Згадані структури припускають, що меню є статичними, і ви просто переходите по них.

Якщо ви хочете динамічні меню (наприклад, відображення певних значень, таких як температура, час і т. Д.), Вам потрібно мати змогу генерувати це.

Одним із способів може бути зареєструвати функцію для складання рядка.

struct menuitem
{
  const char *name; // name to be rendered
  const char * (*builderFunc)( const char *name );  // callback to generate string, if not null.
  functionPointer handlerFunc; // handler for this leaf node (optionally NULL)
  struct menu *child; // pointer to child submenu (optionally NULL)
};
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.