ncurses i okna

0

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

0

Witam.

void d_win(WINDOW *okno)
{
wbkgd(okno,' ');
wborder(okno, ' ', ' ', ' ',' ',' ',' ',' ',' ');
wclear (okno);
wrefresh(okno);
delwin(okno);
}

Odsyłam do manuala. Pozdrawiam!

0

Dziękuje bardzo za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1