#include #include WINDOW* create_win( int height, int width, int starty, int startx); void destroy_win(WINDOW* local_win); int main(int argc, char* argv[]) { //Déclaration des variables de travail WINDOW* my_win; int startx, starty, width, height; int ch; //intialisation du contexte ncurses initscr(); cbreak(); //Désactivation du buffer, chaque touche pressée est évaluée immédiatement. keypad(stdscr, TRUE); //active les touches fonctions height = 5; width = 15; starty = (LINES - height) / 2; startx = (COLS - width) / 2; //insère le message pour quitter dans la fenetre par défaut stdscr printw("Pressez F1 pour quitter"); refresh(); my_win = create_win(height, width, starty, startx); while( (ch = getch()) != KEY_F(1) ) { switch(ch) { case KEY_LEFT: destroy_win(my_win); my_win = create_win(height, width, starty, --startx); break; case KEY_RIGHT: destroy_win(my_win); my_win = create_win(height, width, starty, ++startx); break; case KEY_UP: destroy_win(my_win); my_win = create_win(height, width, --starty, startx); break; case KEY_DOWN: destroy_win(my_win); my_win = create_win(height, width, ++starty, startx); break; } } //quitte le mode ncurses en restaurant l'environnement et libérant la mémoire. endwin(); return EXIT_SUCCESS; } WINDOW* create_win(int height, int width, int starty, int startx) { WINDOW* local_w; local_w = newwin(height, width, starty, startx); box(local_w, 0, 0); wrefresh(local_w); return local_w; } void destroy_win(WINDOW* wp) { /* la fonction box ne produira pas l'effet désiré car les caractères utiliser pour les angles * ne seront pas effacés. On utilise wborder qui permet de spécifier tous les caractères du cadre. */ wborder(wp, ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '); /* arg 2 : caractère coté gauche * arg 3 : caractère coté droit * arg 4 : caractère haut * arg 5 : caractère bas * arg 6 : caractère coin haut gauche * arg 7 : caractère coin haut droit * arg 8 : caractère coin bas gauche * arg 9 : caractère coin bas droit */ wrefresh(wp); delwin(wp); }