Witam, zaczynam pisać prosty projekt, jednak z ncurses (i wszystkimi tymi oknami) nie miałem wcześniej styczności. Zacząłem od pisania menu. Chciałbym żeby działało w sposób następujący: wybór strzałkami określonej pozycji z menu, wybór jej enterem, zaakceptowanie lub dopisanie wartości, powrót do menu i usunięcie wszystkiego poza menu. Mam problem z owym powrotem. Nie wiem jak po wybraniu jakiejś pozycji i nadpisaniu jej powrócić i wymazać zbędny tekst. Myślałem nad stworzeniem drugiego okna WINDOW*opcje_win i tam wstawiać wypisane wartości za pomocą wprintw ale jakimś cudem nie moge tego zrobić. Czy ktoś ma może pomysł na rozwiązanie tego problemu?

#include <ncurses.h>

#define SZEROKOSC 30
#define WYSOKOSC 8

int startx = 0;
int starty = 0;

char *wybory[]={
"Rozmiar tablicy w pionie",
"Rozmiar tablicy w poziomie",
"Czas wstrzymania",
"Przejscie do planszy "
};
int n_wybor =sizeof(wybory)/sizeof(char *);
void drukuj_menu(WINDOW *menu_win, int highlight);

int main()
{ WINDOW *menu_win;
WINDOW *opcje_win;
int highlight = 1;
int wybor = 0;
int c,y=25;

initscr();
clear();
noecho();
cbreak();	
startx = (80 - SZEROKOSC) / 2;
starty = (24 - WYSOKOSC) / 2;
menu_win = newwin(WYSOKOSC, SZEROKOSC, starty, startx);
opcje_win = newwin(5,50,19,0);
keypad(menu_win, TRUE);
mvprintw(0, 0, "Uzyj strzalek do poruszania sie w gore i w dol, Wcisnij enter aby wybrac");
refresh();
drukuj_menu(menu_win, highlight);
while(1)
{	c = wgetch(menu_win);
	switch(c)
	{	case KEY_UP:
			if(highlight == 1)
				highlight = n_wybor;
			else
				--highlight;
			break;
		case KEY_DOWN:
			if(highlight == n_wybor)
				highlight = 1;
			else 
				++highlight;
			break;
		case 10:
			wybor = highlight;
			break;
		default:
			refresh();
			break;
	}
	drukuj_menu(menu_win, highlight);
	if(wybor != 0)	
		break;
}	
mvprintw(19,0,"Wybrales %s\n",wybory[wybor - 1]);
if (wybor == 1) 
	{printw("Obecna wartosc to 25, wpisz wartosc w zakresie od 0 do 25 lub wcisnij enter wy pozostawic obecna wartosc\n");
	echo();
	while (y<0 || y>=25)
	{
	scanw("%d\n",&y);
	if (y<0 || y>=25)printw("... mialo byc od 0 do 25 \n");
	else printw("Obecna wartosc to %d",y);};
	}
	
refresh();
getch();
endwin();
return 0;

}

void drukuj_menu(WINDOW *menu_win, int highlight)
{
int x, y, i;

x = 2;
y = 2;
box(menu_win,0,0);
for(i = 0; i < n_wybor; ++i)
{	if(highlight == i + 1) 
	{	wattron(menu_win, A_REVERSE); 
		mvwprintw(menu_win, y, x, "%s", wybory[i]);
		wattroff(menu_win, A_REVERSE);
	}
	else
		mvwprintw(menu_win, y, x, "%s", wybory[i]);
	++y;
}
wrefresh(menu_win);

}