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