Bana bir Pencere göster !!!

Eğer bir pencere oluşturuldu ve biz de göremiyorsak bu komik bir durumdur. Eğlenceli kısım pencereyi göstermekle başlar. box() işlevi pencere etrafına bir çerçeve çizmek için kullanılır. Bu işlevleri aşağıdaki örnekte daha ayrıntılı inceleyelim.

Örnek 5.12. Pencere Çerçevesi örneği

#include <ncurses.h>

WINDOW *create_newwin(int height, int width, int starty, int startx);
void destroy_win(WINDOW *local_win);

int main(int argc, char *argv[])
{ WINDOW *my_win;
  int startx, starty, width, height;
  int ch;

  initscr();                      /* Curses kipini ilklendirme    */
  cbreak();                       /* Satır önbelleği etkisiz,     *
                                   * herşeyi bana gönder          */
  keypad(stdscr, TRUE);           /* Şu şeker F1'e ihtiyacım var  */

  height = 3;
  width = 10;
  starty = (LINES - height) / 2;  /* Pencerenin ortasına yazmak için */
  startx = (COLS - width) / 2;    /* hesaplama yapılıyor             */
  printw("Press F1 to exit");
  refresh();
  my_win = create_newwin(height, width, starty, startx);

  while((ch = getch()) != KEY_F(1))
  { switch(ch)
    { case KEY_LEFT:
        destroy_win(my_win);
        my_win = create_newwin(height, width, starty,--startx);
        break;
      case KEY_RIGHT:
        destroy_win(my_win);
        my_win = create_newwin(height, width, starty,++startx);
        break;
      case KEY_UP:
        destroy_win(my_win);
        my_win = create_newwin(height, width, --starty,startx);
        break;
      case KEY_DOWN:
        destroy_win(my_win);
        my_win = create_newwin(height, width, ++starty,startx);
        break;
    }
  }

  endwin();                       /* Curses kipi sonu */
  return 0;
}

WINDOW *create_newwin(int height, int width, int starty, int startx)
{ WINDOW *local_win;

  local_win = newwin(height, width, starty, startx);
  box(local_win, 0 , 0);          /* 0, 0 yatay ve düşey çizgiler    *
                                   * için öntanımlı karakteri verir  */
  wrefresh(local_win);            /* Kutuyu gösterir                 */

  return local_win;
}

void destroy_win(WINDOW *local_win)
{
  /* box(local_win, ' ', ' '); : Bu istenen pencere silme sonucunu
    * vermeyecektir. Pencerenin dört köşesi ve
    * çirkin küçük bir kısmı kalacaktır.
    */
  wborder(local_win, ' ', ' ', ' ',' ',' ',' ',' ',' ');
  /* Alınan parametreler şu şekildedir
    * 1. win: üzerinde çalışılacak pencere
    * 2. ls: pencerenin sol kenarı için kullanılacak karakter
    * 3. rs: pencerenin sağ kenarı için kullanılacak karakter
    * 4. ts: pencerenin üst kenarı için kullanılacak karakter
    * 5. bs: pencerenin alt kenarı için kullanılacak karakter
    * 6. tl: pencerenin sol üst köşesi için kullanılacak karakter
    * 7. tr: pencerenin sağ üst köşesi için kullanılacak karakter
    * 8. bl: pencerenin sol alt köşesi için kullanılacak karakter
    * 9. br: pencerenin sağ alt köşesi için kullanılacak karakter
    */
  wrefresh(local_win);
  delwin(local_win);
}