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;