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, botów: 0