Кто знаком с 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();
}