Konsolenbildschirmpuffer

Ein Bildschirmpuffer ist ein zweidimensionales Array aus Zeichen- und Farbdaten für die Ausgabe in einem Konsolenfenster. Eine Konsole kann über mehrere Bildschirmpuffer verfügen. Der aktive Bildschirmpuffer ist derjenige, der auf dem Bildschirm angezeigt wird.

Ein Bildschirmpuffer wird vom System immer beim Erstellen einer neuen Konsole erstellt. Zum Öffnen eines Handles zum aktiven Bildschirmpuffer einer Konsole geben Sie den CONOUT$-Wert in einem Aufruf der Funktion CreateFile an. Ein Prozess kann die Funktion CreateConsoleScreenBuffer verwenden, um zusätzliche Bildschirmpuffer für seine Konsole zu erstellen. Ein neuer Bildschirmpuffer ist nicht aktiv, bis sein Handle in einem Aufruf der Funktion SetConsoleActiveScreenBuffer angegeben wird. Allerdings kann auf Bildschirmpuffer lesend und schreibend zugegriffen werden, gleich, ob sie aktiv oder inaktiv sind.

Jeder Bildschirmpuffer weist sein eigenes zweidimensionales Array aus Zeicheninformations-Datensätzen auf. Die Daten für jedes Zeichen sind in einer CHAR_INFO-Struktur gespeichert, die das Unicode- oder ANSI-Zeichen und die Vordergrund- und Hintergrundfarben angibt, in denen das betreffende Zeichen angezeigt wird.

Eine Reihe von Eigenschaften, die einem Bildschirmpuffer zugeordnet sind, kann für jeden Bildschirmpuffer unabhängig festgelegt werden. Das bedeutet, dass ein Wechsel des aktiven Bildschirmpuffers dramatische Auswirkungen auf die Darstellung des Konsolenfensters haben kann. Zu den Eigenschaften, die einem Bildschirm Puffer zugeordnet sind, gehören:

  • Die Größe des Bildschirmpuffers in Zeichenzeilen und -spalten.
  • Textattribute (Vordergrund- und Hintergrundfarben zum Anzeigen von Text, der von der WriteFile- oder WriteConsole-Funktion geschrieben werden soll).
  • Fenstergröße und -position (der rechteckige Bereich des Konsolenbildschirmpuffers, der im Konsolenfenster angezeigt wird).
  • Position, Darstellung und Sichtbarkeit des Cursors.
  • Ausgabemodi (ENABLE_PROCESSED_OUTPUT und ENABLE_WRAP_AT_EOL_OUTPUT). Weitere Informationen zu Ausgabemodi von Konsolen finden Sie unter Allgemeine Konsolenmodi.

Wenn ein Bildschirmpuffer erstellt wird, enthält er an jeder Position Leerzeichen. Sein Cursor ist sichtbar und am Ursprung (0,0) des Puffers positioniert, ebenso ist die linke obere Ecke des Fensters am Ursprung des Puffers positioniert. Die Größe des Konsolenbildschirmpuffers, die Fenstergröße, die Textattribute und die Darstellung des Cursors werden durch den Benutzer oder die Standardwerte des Systems bestimmt. Verwenden Sie zum Abrufen der aktuellen Werte der verschiedenen Eigenschaften, die dem Konsolenbildschirmpuffer zugeordnet sind, die Funktionen GetConsoleScreenBufferInfo, GetConsoleCursorInfo und GetConsoleMode.

Anwendungen, die Eigenschaften des Konsolenbildschirmpuffers ändern, sollten entweder einen eigenen Bildschirmpuffer erstellen oder den Zustand des geerbten Bildschirmpuffers beim Starten speichern und ihn beim Beenden wiederherstellen. Dieses kooperative Verhalten ist erforderlich, um sicherzustellen, dass andere Anwendungen, die dieselbe Konsolensitzung nutzen, von den Änderungen nicht betroffen sind.

Tipp

Es empfiehlt sich, zukünftig nach Möglichkeit den alternativen Puffermodus zu verwenden, statt für diesen Zweck einen zweiten Bildschirmpuffer zu erstellen. Der alternative Puffermodus bietet übergreifend bessere Kompatibilität für Remotegeräte und andere Plattformen. Weitere Informationen finden Sie in unserer Erörterung von klassischen Konsolen-APIs im Vergleich mit virtuellen Terminals.

Darstellung und Position des Cursors

Der Cursor eines Bildschirmpuffers kann sichtbar oder ausgeblendet sein. Wenn er sichtbar ist, kann seine Darstellung abweichen, beginnend mit dem vollständigen Ausfüllen einer Zeichenzelle bis hin zur Darstellung als horizontale Linie an der Zellunterkante. Verwenden Sie zum Abrufen von Informationen zu Darstellung und Sichtbarkeit des Cursors die Funktion GetConsoleCursorInfo. Diese Funktion meldet, ob der Cursor sichtbar ist, und beschreibt die Darstellung des Cursors als Prozentsatz einer Zeichenzelle, die von ihm ausgefüllt wird. Verwenden Sie zum Festlegen von Darstellung und Sichtbarkeit des Cursors die Funktion SetConsoleCursorInfo.

Zeichen, die von den allgemeinen E/A-Konsolenfunktionen geschrieben werden, werden an der aktuellen Cursorposition geschrieben und bewegen den Cursor vorwärts an die nächste Position. Verwenden Sie GetConsoleScreenBufferInfo zum Bestimmen der aktuellen Cursorposition im Koordinatensystem eines Bildschirmpuffers. Sie können SetConsoleCursorPosition verwenden, um die Cursorposition festzulegen und auf diese Weise die Platzierung von Text zu steuern, die von den allgemeinen E/A-Funktionen geschrieben oder wiederholt werden. Wenn Sie den Cursor bewegen, wird der Text an der neuen Cursorposition überschrieben.

Hinweis

Vom Verwenden der Low-Level-Funktionen zum Ermitteln der Cursorposition wird abgeraten. Wir empfehlen, zum Abfragen dieser Position für erweiterte Layouts bei Bedarf virtuelle Terminalsequenzen zu verwenden. Weitere Informationen zu den Vorzügen von virtuellen Terminalsequenzen finden Sie im Dokument zu den klassischen Funktionen im Vergleich mit virtuellen Terminals.

Die Position, Darstellung und Sichtbarkeit des Cursors werden für jeden Bildschirmpuffer unabhängig festgelegt.

Zeichenattribute

Zeichenattribute lassen sich nach zwei Klassen unterscheiden: Farbe und DBCS. In der WinCon.h-Headerdatei sind die folgenden Attribute definiert.

attribute Bedeutung
FOREGROUND_BLUE Die Textfarbe enthält Blau.
FOREGROUND_GREEN Die Textfarbe enthält Grün.
FOREGROUND_RED Die Textfarbe enthält Rot.
FOREGROUND_INTENSITY Die Textfarbe wird verstärkt.
BACKGROUND_BLUE Die Hintergrundfarbe enthält Blau.
BACKGROUND_GREEN Die Hintergrundfarbe enthält Grün.
BACKGROUND_RED Die Hintergrundfarbe enthält Rot.
BACKGROUND_INTENSITY Die Hintergrundfarbe wird verstärkt.
COMMON_LVB_LEADING_BYTE Führendes Byte.
COMMON_LVB_TRAILING_BYTE Schließendes Byte.
COMMON_LVB_GRID_HORIZONTAL Oben horizontal.
COMMON_LVB_GRID_LVERTICAL Links vertikal.
COMMON_LVB_GRID_RVERTICAL Rechts vertikal.
COMMON_LVB_REVERSE_VIDEO Vertausche Vordergrund- und Hintergrundattribute.
COMMON_LVB_UNDERSCORE Unterstrich.

Die Vordergrundattribute geben die Textfarbe an. Die Hintergrundattribute geben die Farbe an, die zum Auffüllen des Zellenhintergrunds verwendet wird. Die anderen Attribute werden im Zusammenhang von DBCSverwendet.

Anwendungen können die Vordergrund- und Hintergrundkonstanten kombinieren, um verschiedene Farben zu erzielen. Beispielsweise ergibt die folgende Kombination hellblaugrünen Text auf einem blauen Hintergrund.

FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_BLUE

Wenn keine Hintergrundkonstante angegeben wird, ist der Hintergrund schwarz, und wenn keine Vordergrundkonstante angegeben wird, ist der Text schwarz. Beispielsweise ergibt die folgende Kombination schwarzen Text auf einem weißen Hintergrund. Rot, grün und blau werden für den Hintergrund angegeben und zu einem weißen Hintergrund kombiniert. Für den Vordergrund werden keine Flagfarben festgelegt, sodass dieser schwarz ist.

BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED

Jede Zeichenzelle eines Bildschirmpuffers speichert die Farbattribute für die zum Zeichnen des Vordergrunds (Text) und Hintergrunds der betreffenden Zelle verwendeten Farben. Eine Anwendung kann die Farbdaten für jede Zeichenzelle individuell festlegen und sie im Element Attributes der CHAR_INFO-Struktur für die einzelnen Zellen speichern. Die aktuellen Textattribute jedes Bildschirmpuffers werden für die anschließend von den allgemeinen Funktionen geschriebenen oder wiederholten Zeichen verwendet.

Eine Anwendung kann GetConsoleScreenBufferInfo zum Bestimmen der aktuellen Textattribute eines Bildschirmpuffers und die Funktion SetConsoleTextAttribute zum Festlegen der Zeichenattribute verwenden. Das Ändern der Attribute eines Bildschirmpuffers wirkt sich nicht auf die Darstellung der zuvor geschriebenen Zeichen aus. Diese Textattribute wirken sich nicht auf Zeichen aus, die von den Low-Level-E/A-Konsolenfunktionen (wie etwa WriteConsoleOutput oder WriteConsoleOutputCharacter) geschrieben werden, die entweder explizit die Attribute für jede geschriebene Zelle angeben oder die Attribute unverändert lassen.

Hinweis

Es wird davon abgeraten, die Low-Level-Funktionen zum Ändern der standardmäßigen und spezifischen Textattribute zu verwenden. Es empfiehlt sich, virtuelle Terminalsequenzen zum Festlegen von Textattributen zu verwenden. Weitere Informationen zu den Vorzügen von virtuellen Terminalsequenzen finden Sie im Dokument zu den klassischen Funktionen im Vergleich mit virtuellen Terminals.

Schriftartattribute

Die Funktion GetCurrentConsoleFont ruft Informationen zur aktuellen Konsolenschriftart ab. Zu den in der Struktur CONSOLE_FONT_INFO gespeicherten Informationen gehören auch die Breite und Höhe der einzelnen Zeichen der Schriftart.

Die Funktion GetConsoleFontSize ruft die Größe der vom angegebenen Konsolenbildschirmpuffer verwendeten Schriftart ab.

Hinweis

Von der Verwendung von Funktionen zum Suchen und Ändern von Schriftartinformationen wird abgeraten. Es empfiehlt sich, Befehlszeilenanwendungen in schriftartneutraler Weise zu betreiben, um Plattformkompatibilität sowie Kompatibilität mit Hostumgebungen sicherzustellen, die dem Benutzer die Anpassung der Schriftart erlauben. Weitere Informationen zu Benutzereinstellungen und Hostumgebungen, einschließlich Terminals, finden Sie in der Roadmap für das Ökosystem.