Grazie alle finestre, lo schermo può essere suddiviso in più porzioni rettangolari che possono essere gestite in modo indipendente. Ad esempio una finestra potrebbe servire per l’input dell’utente, occupando magari due o tre linee in fondo allo schermo, mentre tutto il resto del display potrebbe ospitare i risultati delle elaborazioni. Occorre dire che le finestre in ncurses non sono sovrapponibili o meglio non è definito un ordine a priori tra le finestre per stabilire se una è davanti ad un’altra. Le funzioni principali per la gestione delle finestre sono:
Le funzioni che intervengono nell’aggiornamento dello schermo sono:
Uno degli errori più comuni è credere che refresh aggiorni tutto lo schermo, in realtà questa funzione mostra il contenuto di stdscr che per ncurses è una finestra come le altre. Se ad esempio scriviamo solo sulle finestre create e poi aggiorniamo con refresh, lo schermo apparirà nero, perché è stato copiato il contenuto solo di stdscr che non contiene nulla.
/* File window.c
compilare con: gcc -Wall -o window window.c -lncursesw */
#include “stdio.h”
#include “ncursesw/curses.h”
void InitLib()
{
initscr();
cbreak();
keypad(stdscr, TRUE);
}
WINDOW* CreateWindow(int iWidth, int iHeight, int iStartX, int iStartY)
{
WINDOW* pWin = newwin(iHeight, iWidth, iStartY, iStartX);
box(pWin, 0, 0);
wrefresh(pWin);
return pWin;
}
void DestroyWindow(WINDOW* pWin)
{
wborder(pWin, ‘ ‘, ‘ ‘, ‘ ‘, ‘ ‘, ‘ ‘, ‘ ‘, ‘ ‘, ‘ ‘);
wrefresh(pWin);
delwin(pWin);
}
int main(int argc, char** argv)
{
WINDOW* pWin;
int iStartX, iStartY, iWidth, iHeight;
int cValue;
InitLib();
iWidth = 10;
iHeight = 3;
iStartX = (COLS – iWidth) / 2;
iStartY = (LINES – iHeight) / 2;
printw(“Premere i tasti direzionali per far muovere il rettangolo\n”);
printw(“Premere Inizio ( Home ) per uscire”);
refresh();
pWin = CreateWindow(iWidth, iHeight, iStartX, iStartY);
while ((cValue = getch()) != KEY_HOME)
{
switch(cValue)
{
case KEY_LEFT:
DestroyWindow(pWin);
pWin = CreateWindow(iWidth, iHeight, –iStartX, iStartY);
break;
case KEY_RIGHT:
DestroyWindow(pWin);
 
; pWin = CreateWindow(iWidth, iHeight, ++iStartX, iStartY);
break;
case KEY_UP:
DestroyWindow(pWin);
pWin = CreateWindow(iWidth, iHeight, iStartX, –iStartY);
break;
case KEY_DOWN:
DestroyWindow(pWin);
pWin = CreateWindow(iWidth, iHeight, iStartX, ++iStartY);
break;
}
}
endwin();
return 0;
}
Questo esempio dovrebbe essere semplice da comprendere per chi ha seguito con attenzione tutte le lezioni precedenti sulla programmazione della libreria ncurses. Se così non fosse potete sempre avere dei chiarimenti tramite il forum ( vedi in alto a destra in questo blog ) oppure inserendo un commento a questo o agli altri articoli del corso.
Sono arrivato alla convinzione che un abbonamento per tutti i miei software gestionali sia il…
MerciGest è un software per la gestione del magazzino completamente gratuito. Continua a leggere→
In ufficio può capitare di doversi allontanare dal proprio posto di lavoro, ecco che allora…
In questo articolo vedremo quando è più o meno utile togliere la corrente ad un…
Dopo la pausa invernale dovuta al lavoro che devo fare per sostentarmi, eccomi di nuovo…
Vediamo come eliminare i files direttamente da Windows senza utilizzare il cestino. Continua a leggere→