Ncurses: Panels


<<< ncurses-Startseite ncurses << Inhaltsverzeichnis
< Fenster Menüs >



Ncurses-Fenster sind gut verwendbar, solange sie nebeneinander platziert sind. Überlappen sich Fenster jedoch, dann kann es kompliziert werden. Aus diesem Grund kennt ncurses sogenannte Panels. Diese bieten Mechanismen, Fenster auch in z-Richtung zu verwalten. Panels gehören zwar zu ncurses, sind aber in eine eigene Bibliotheksdatei ausgelagert.


Ein neues Panel erzeugen:

PANEL *new_panel(WINDOW *win);

Reservierten Panel- Speicherplatz freigeben:

int del_panel(PANEL *pan);

Panelanzeige manipulieren:

int bottom_panel(PANEL *pan); // Panel nach hinten verschieben
int top_panel(PANEL *pan);    // Panel in den Vordergrund holen
int show_panel(PANEL *pan);   // Panel anzeigen
int hide_panel(PANEL *pan);   // Panel verstecken

Vorne-, hintenliegendes Panel eruieren (pan=0: top bzw. bottom):

PANEL *panel_above(const PANEL *pan)
PANEL *panel_below(const PANEL *pan)

Panels updaten:

void update_panels();

BeispielBearbeiten

#include <panel.h>
#include <stdlib.h>

WINDOW *win1, *win2;
PANEL  *pan1, *pan2;

void quit(void)
{
  del_panel(pan1);
  del_panel(pan2);
  delwin(win1);
  delwin(win2);
  endwin();
}

int main(void)
{
  int flag=0;

  initscr();
  atexit(quit);
  clear();
  noecho();
  curs_set(0);
  cbreak();
  keypad(stdscr, 1);

  start_color();
  init_pair(1, COLOR_YELLOW, COLOR_BLUE);
  init_pair(2, COLOR_BLACK, COLOR_WHITE);
  init_pair(3, COLOR_BLACK, COLOR_YELLOW);

  win1 = newwin(10, 25, 5, 10);
  win2 = newwin(10, 25, 10, 15);
  box(win1, ACS_VLINE, ACS_HLINE);
  box(win2, ACS_VLINE, ACS_HLINE);
  pan1 = new_panel(win1);
  pan2 = new_panel(win2);
  
  bkgd(COLOR_PAIR(1));
  wbkgd(win1, COLOR_PAIR(2));
  wbkgd(win2, COLOR_PAIR(3));

  mvaddstr(2,4, "F9 beendet das Programm");
  mvwaddstr(win1, 2, 3, "Drücke eine Taste");
  mvwaddstr(win2, 7, 3, "Drücke eine Taste");

  update_panels();
  doupdate();

  while(getch() != KEY_F(9))
  {
    if (flag==0)
    {
      top_panel(pan1);
      flag = 1; 
    }
    else
    {
      top_panel(pan2);
      flag = 0;
    }

    update_panels();
    doupdate();
  } 

  return (0);  
}

Compilieren, Linken:

gcc -o bsp bsp.c -lpanel -lncurses
   


<<< ncurses-Startseite ncurses << Inhaltsverzeichnis
< Fenster Menüs >