J'essaye d'imprimer un sous-menu associé à un menu principal affiché avec ncurses. Voici comment je l'ai organisé:
Malheureusement, je ne peux pas passer la deuxième étape, le sous-menu n'apparaît jamais à l'écran.
#include <ncurses.h> #include <iostream> #include <string> int main() { std::string nameMainMenuExample = "/parent1/folder"; std::string nameSubMenuExample = "/folder/file"; // initialize ncurses WINDOW *win; win = initscr(); raw(); curs_set(0); cbreak(); box(win, 0, 0); refresh(); wrefresh(win); keypad(win, true); // end initialize ncurses int highlight = 0; int choice; // PRESS 'a' to ESCAPE LOOP do { mvwprintw(win, 1, 1, nameMainMenuExample.c_str()); switch (choice) { case KEY_UP: --highlight; if (highlight == -1) { highlight = 0; } break; case KEY_DOWN: ++highlight; if (highlight == 1) { highlight = 0; } break; case KEY_ENTER: // Enter key pressed clear(); mvwprintw(win, 1, 1, nameSubMenuExample.c_str()); refresh(); break; default: break; } } while ((choice = wgetch(win)) != 97); // random choice a == 97 endwin(); return 0; }
J'attends juste le sous Le menu à imprimer à l'écran après ncurses efface l'écran du menu principal. Merci
3 Réponses :
Si vous souhaitez activer le sous-menu sur la touche Entrée, vous devez vérifier la valeur wgetch
renvoyée par rapport à KEY_ENTER
(qui est quelque chose comme 16777221 numériquement), et non 10 .
je le change pour case KEY_ENTER:
dans mon code et cela ne fonctionne toujours pas?
@ThamLeroy Heure de débogage de petits programmes
Vous mélangez des appels vers différentes fenêtres ( clear
et refresh
utilisez stdscr
) et celui que votre appel wgetch
utilise obtient son propre wrefresh
. Comme la fenêtre de menu n'est pas en cours d'actualisation, elle n'apparaît jamais, et comme wgetch
effectue un wrefresh
, < strong> qui peut en outre obscurcir les choses.
Commencez par appliquer les appels wrefresh
aux fenêtres que vous souhaitez repeindre.
J'ai changé et simplifié mon code mais j'ai des difficultés à le faire fonctionner? Des idées? Merci
En utilisant ncurses
en C ++, la valeur de la clé ENTER est simplement '\ n'
Par exemple:
case '\n': clear(); mvwprintw(win, 1, 1, nameSubMenuExample.c_str()); refresh(); break;