Witam, z braku laku postanowiłem zabrać się za ncurses. Przeczytałem tutoriala dostępnego na stronie ncurses i zabrałem się za swój pierwsz programik.
#include <ncurses.h>
#include <stdlib.h>
#include <string.h>
#define INFO "Pierwszy programik w ncurses by us3r, " __DATE__
WINDOW *cokno(WINDOW *okno, int height, int width, int starty, int startx, int kolor, char *label);
void srodkuj (WINDOW *okno,char *tekst, int kolor);
void d_win(WINDOW *okno);
int main ( int argc, char *argv[]) {
/* Zmienne */
WINDOW *okno[4];
int x,y;
/* Inicjalizacja */
initscr();
getmaxyx(stdscr,y,x);
if ((y<20) || (x<80)) {
endwin();
printf("Minimalna rozdzielczosc ekranu to 80x20! \n");
return 1;
}
start_color();
cbreak();
noecho();
keypad(stdscr,TRUE);
refresh();
/* Inicjalizacja kolorow */
init_pair(1,COLOR_RED,COLOR_BLACK);
init_pair(2,COLOR_GREEN,COLOR_BLACK);
init_pair(3,COLOR_BLUE,COLOR_BLACK);
init_pair(4,COLOR_CYAN,COLOR_BLACK);
okno[0]=cokno(okno[0],3,0,0,0,COLOR_PAIR(2),""); // Naglowek
okno[1]=cokno(okno[1],LINES-8,25,3,0,COLOR_PAIR(2),"Menu"); //Menu
okno[2]=cokno(okno[2],LINES-8,0,3,25,COLOR_PAIR(2),"Okno"); //Okno glowne
okno[3]=cokno(okno[3],5,0,LINES-5,0,COLOR_PAIR(2),"Pomoc"); //Pomoc
srodkuj(okno[0],INFO,COLOR_PAIR(4));
getch();
d_win(okno[0]);
getch();
endwin();
return 0;
}
void srodkuj (WINDOW *okno,char *tekst, int kolor) {
int x,y;
getmaxyx(okno,y,x);
wattron(okno,kolor);
mvwprintw(okno,y/2,(x-strlen(tekst))/2,"%s",tekst);
wrefresh(okno);
}
WINDOW *cokno(WINDOW *okno, int height, int width, int starty, int startx, int kolor, char *label) {
okno=newwin(height,width,starty,startx);
box(okno,0,0);
wattron(okno, kolor);
mvwprintw(okno,0,4,"%s", label);
wrefresh(okno);
return okno;
}
void d_win(WINDOW *okno)
{
wbkgd(okno,' ');
wborder(okno, ' ', ' ', ' ',' ',' ',' ',' ',' ');
wrefresh(okno);
delwin(okno);
}
Wszystko ładnie działa.. jednak jest pewna rzecz której nie rozumiem.
Założmy, że chce usunąć "nagłówek" -> czyli okno[0]. Wrzucam go do mojej funkcji d_win i usuwam. Wszystko fajnie okno ginie. Niemniej jednak zostaje napis wprowadzony przez mvwprintw do tego okna. Wygląda tak jakbym usuwał tylko obranowamowanie a napis zostaje. Może źle zrozumiałem z tuturiala działanie delwin. Mógłby mi ktoś wyjaśnić gdzie popełniłem błąd? Z góry dziękuje za pomoc. Pozdrawiam