1
votes

Problème avec le sous-menu d'impression dans ncurses avec C ++

J'essaye d'imprimer un sous-menu associé à un menu principal affiché avec ncurses. Voici comment je l'ai organisé:

  1. faire {} while (); boucle avec wgetch obtient l'entrée au clavier de l'utilisateur
  2. si l'utilisateur appuie sur la touche Entrée, l'entrée du sous-menu s'affiche après avoir effacé tout l'écran.

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


0 commentaires

3 Réponses :


0
votes

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 .


2 commentaires

je le change pour case KEY_ENTER: dans mon code et cela ne fonctionne toujours pas?


@ThamLeroy Heure de débogage de petits programmes



0
votes

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.


1 commentaires

J'ai changé et simplifié mon code mais j'ai des difficultés à le faire fonctionner? Des idées? Merci



0
votes

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;


0 commentaires