Inhaltsverzeichnis

Fensterrahmen

Aus graphischen Oberflächen ist man Fensterrahmen gewohnt. Dies ist auch unter NCurses möglich. Allerdings gilt es dabei zu beachten, dass ein Fensterrahmen nichts anderes ist, was entsprechende Zeichen an den Rändern des Fensters zu drucken. Diese Zeichen können jedoch dann auch wieder überschrieben werden, man muss also darauf achten, dass man den Inhalt des Fensters so formatiert, dass der Fensterrahmen nicht überschrieben wird.

Border

Um einen Rahmen zu zeichnen werden die Zeichen bestimmt, die für die linken, rechten, oberen, unteren Linien verwendet werden, sowie die Zeichen, die in den einzelnen Ecken verwendet werden. Hierzu bieten sich natürlich für die vertikalen Linien das Pipe-Symbol (vertikaler Strich: '|') und das Minus-Zeichen ('-') für die horizontalen Linien. Eventuell kann das Terminal aber wirklich vertikale und horizontale Linien zeichnen. Dies müssen wir aber nicht selbst erfragen, wir können NCurses hier ein ACS-Zeichen 1) übergeben, so dass sich NCurses selbst bestimmen kann, welches Zeichen der Terminal hierfür im Idealfall erhält.

Token Beschreibung Ideale Darstellung mögliche Darstellung
ACS_VLINE vertikale Linie |
ACS_HLINE horizontale Linie -
ACS_ULCORNER obere, linke Ecke +
ACS_URCORNER obere, rechte Ecke +
ACS_LLCORNER untere, linke Ecke +
ACS_LLCORNER untere, rechte Ecke +

Um das Hauptfenster kann ein Rahmen mit der Funktion border() gezogen werden. Für ein bestimmtes Fenster verwerndet man wborder(). Beide Funktionen erhalten Zeichen übergeben, die den Rahmen beschreiben:

Die folgende Zeile zeichnet einen Rahmen um das Hauptfenster, der nur aus den '+', '-' und dem Pipe-Symbol besteht:

border( '|', '|', '-', '-', '+', '+', '+', '+' );

Übergibt man für ein Zeichen die 0, so wird das ACS-Standardzeichen verwendet. Der folgende Befehl zeichnet also einen Rahmen, der im Idealfall aus Linien besteht, oder - falls das Terminal derartige Linien nicht darstellen kann, aus den Zeichen, die für dieses Terminal am ehesten an einen Rahmen erinnern, zum Beispiel '+', '-' und das Pipesymbol.

border( 0, 0, 0, 0, 0, 0, 0, 0 );

Für den Entwickler bedeutet diese Zeile, dass er sich nicht darum kümmern muss, wie gut das Terminal des Benutzers ausgestattet ist - entsprechend der Möglichkeiten des Benutzers, wird er etwas zu sehen bekommen, was wie ein Rahmen aussieht.

Linker und Rechter Rahmen, wie oberer und unterer Rahmen werden einzeln angegeben. So lässt sich beispielsweise mit

border( 0, ' ', 0, ' ', 0, 0, 0, 0 );

einen Rahmen zeichnen, dessen Rahmen rechts und unten mit Leerzeichen gezeichnet wurde. In den freigelassenen Raum ließen sich nun beispielsweise Scrollbars einzeichnen.

Kürzer: Box

Oftmals möchte man gar nicht soviel konfigurieren, man möchte die Standard-Ecken und wenn es hoch kommt eventuell etwas Einfluss auf die Strecken. Hierfür eignet sich box(). Hier werden nur noch das Fenster (es gibt keine wbox-Funktion!) und die Zeichen für die vertikalen und horizontalen Strecken angegeben.

Die Zeile

box( window, 0, 0 );

schafft damit bereits einen kompletten Rahmen um ein Fenster.

1) Alternative Character Set