Кто знаком с ncurses в СИ

Вот у меня выводится выбор чего либо, мне нужно, чтобы пользователь выбрал нужный ему Choice, и cоздалось новое окно, где будет дан еще выбор между чем либо. Но тут изначальное меню засело как водяной знак, как его очистить и наложить новое окно с новым выбором?(функция mode_menu)

    #include <string.h>
#include <stdio.h>
#include <ncurses.h>

#define WIDTH 30
#define HEIGHT 10

int startx = 0;
int starty = 0;


char* choices[] = {
    "Choice 1",
    "Choice 2",
    "Choice 3",
    "Choice 4",
    "Exit",
};

int n_choices = sizeof(choices) / sizeof(char*);
void print_menu(WINDOW* menu_win, int highlight);
void main_menu();
void mode_menu(int mode);

// gcc -Wall -o res main.c -lncurses

int main()
{
    main_menu();
    return 0;
}

void print_menu(WINDOW* menu_win, int highlight)
{
    int x, y, i;
    x = 2;
    y = 2;
    box(menu_win, 0, 0);
    for (i = 0; i < n_choices; ++i) {
        if (highlight == i + 1) /* High light the present choice */
        {
            wattron(menu_win, A_REVERSE);
            mvwprintw(menu_win, y, x, "%s", choices[i]);
            wattroff(menu_win, A_REVERSE);
        }
        else
            mvwprintw(menu_win, y, x, "%s", choices[i]);
        ++y;
    }
    wrefresh(menu_win);
}

void main_menu()
{
    WINDOW* menu_win;


    int highlight = 1;
    int choice = 0;
    int c;
    initscr();
    clear();
    noecho();
    cbreak(); /* Line buffering disabled. pass on everything */
    startx = (80 - WIDTH) / 2;
    starty = (24 - HEIGHT) / 2;
    menu_win = newwin(HEIGHT, WIDTH, starty, startx);
    keypad(menu_win, TRUE);

    refresh();
    print_menu(menu_win, highlight);
    while (1) {
        c = wgetch(menu_win);
        switch (c) {
        case KEY_UP:
            if (highlight == 1)
                highlight = n_choices;
            else
                --highlight;
            break;
        case KEY_DOWN:
            if (highlight == n_choices)
                highlight = 1;
            else
                ++highlight;
            break;
        case KEY_F(1):
            choice = highlight;
            break; 
        case 10: // тут пользователь делает выбор
            if(highlight==5){
              choice = highlight;
            }
            clear();
            mode_menu(highlight);
            refresh();
            break;
        default:
            refresh();
            break;
        }
        print_menu(menu_win, highlight);
        if (choice != 0) /* User did a choice come out of the infinite loop */
            break;
    }
    clrtoeol();
    refresh();
    endwin();
}

void mode_menu(int mode) // если пользователь выбрал choise 1
{
   WINDOW* menu_1;
    int highlight = 1;
    int choice = 0;
    int c;
    initscr();
    clear();
    noecho();
    cbreak(); /* Line buffering disabled. pass on everything */
    startx = (80 - WIDTH) / 2;
    starty = (24 - HEIGHT) / 2;
    menu_1 = newwin(HEIGHT, WIDTH, starty, startx);
    keypad(menu_1, TRUE);
    mvprintw(3, 3, "1nd menu");
    refresh();
    print_menu(menu_1, highlight);
    while (1) {
        c = wgetch(menu_1);
        switch (c) {
        case KEY_UP:
            if (highlight == 1)
                highlight = n_choices;
            else
                --highlight;
            break;
        case KEY_DOWN:
            if (highlight == n_choices)
                highlight = 1;
            else
                ++highlight;
            break;
        case 10:
            if(highlight==5){
              choice = highlight;
            }
            break;
        case KEY_F(2):
            main_menu();
            break;
        default:
            mvprintw(24, 0, "Charcter pressed is = %3d Hopefully it can be printed as '%c'", c, c);
            mvprintw(2, 1, "%d", highlight);
            refresh();
        }
        print_menu(menu_1, highlight);
        if (choice != 0) /* User did a choice come out of the infinite loop */
            break;
    }
    mvprintw(23, 0, "You chose choice %d with choice string %s\n", choice, choices[choice - 1]);
    clrtoeol();
    refresh();
    endwin();
}

Ответы (0 шт):