Проблема с печатью подменю в ncurses с c ++ - PullRequest
1 голос
/ 28 апреля 2019

Я пытаюсь напечатать подменю, связанное с главным меню, показанным с помощью ncurses.Вот как я это организовал:

  1. do {} while ();цикл с wgetch получает ввод с клавиатуры от пользователя
  2. , если пользователь нажимает клавишу ввода, после очистки всего экрана отображается запись в подменю.

К сожалению, я не могу пройти мимо2-й шаг, подменю никогда не отображается на экране.

#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;
}

Я просто ожидаю, что подменю будет напечатано на экране после того, как ncurses очистит экран главного меню.Спасибо

Ответы [ 2 ]

0 голосов
/ 28 апреля 2019

Вы смешиваете звонки в разные окна (clear и refresh, используйте stdscr) и одно ваше wgetch использование вызовов получает свой собственный wrefresh.Так как окно меню не обновляется, оно никогда не появляется, и поскольку wgetch wrefresh, может дополнительно затенить вещи.

Начните с того, что вызовы wrefresh применяются к окнам, которые вы хотите перекрасить.

0 голосов
/ 28 апреля 2019

Если вы хотите активировать подменю на клавише ввода, вы должны проверить значение wgetch, возвращаемое против KEY_ENTER (что-то вроде 16777221 численно), а не 10.

...