Freigeben über


Konsolenbildschirmpuffer

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

Das System erstellt immer dann einen Bildschirmpuffer, wenn eine neue Konsole erstellt wird. Um ein Handle für den aktiven Bildschirmpuffer einer Konsole zu öffnen, geben Sie den CONOUT$ -Wert in einem Aufruf der CreateFile-Funktion an. Ein Prozess kann die CreateConsoleScreenBuffer-Funktion verwenden, um zusätzliche Bildschirmpuffer für die Konsole zu erstellen. Ein neuer Bildschirmpuffer ist erst aktiv, wenn sein Handle in einem Aufruf der SetConsoleActiveScreenBuffer-Funktion angegeben wird. Auf Bildschirmpuffer kann jedoch zum Lesen und Schreiben zugegriffen werden, unabhängig davon, ob sie aktiv oder inaktiv sind.

Jeder Bildschirmpuffer verfügt über ein eigenes zweidimensionales Array von Zeicheninformationsdatensätzen. Die Daten für jedes Zeichen werden in einer CHAR_INFO Struktur gespeichert, die das Unicode- oder ANSI-Zeichen sowie die Vordergrund- und Hintergrundfarben angibt, in denen dieses Zeichen angezeigt wird.

Eine Reihe von Eigenschaften, die einem Bildschirmpuffer zugeordnet sind, können unabhängig für jeden Bildschirmpuffer festgelegt werden. Dies bedeutet, dass das Ändern des aktiven Bildschirmpuffers eine dramatische Auswirkung auf die Darstellung des Konsolenfensters haben kann. Zu den Eigenschaften, die einem Bildschirmpuffer zugeordnet sind, gehören:

  • Bildschirmpuffergröße 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).
  • Cursorposition, Darstellung und Sichtbarkeit.
  • Ausgabemodi (ENABLE_PROCESSED_OUTPUT und ENABLE_WRAP_AT_EOL_OUTPUT). Weitere Informationen zu Konsolenausgabemodi finden Sie unterHigh-Level Konsolenmodi.

Wenn ein Bildschirmpuffer erstellt wird, enthält er Leerzeichen an jeder Position. Der Cursor ist sichtbar und am Ursprung des Puffers positioniert (0,0), und das Fenster wird mit seiner oberen linken Ecke am Ursprung des Puffers positioniert. Die Größe des Konsolenbildschirmpuffers, die Fenstergröße, die Textattribute und die Darstellung des Cursors werden vom Benutzer oder standardmäßig vom System bestimmt. Verwenden Sie zum Abrufen der aktuellen Werte der verschiedenen Eigenschaften, die dem Konsolenbildschirmpuffer zugeordnet sind, die Funktionen "GetConsoleScreenBufferInfo", "GetConsoleCursorInfo" und "GetConsoleMode" .

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

Tipp

Es wird empfohlen, den alternativen Puffermodus in Zukunft zu verwenden, wenn möglich, anstatt einen zweiten Bildschirmpuffer für diesen Zweck zu erstellen. Der alternative Puffermodus bietet eine höhere Kompatibilität über Remotegeräte und andere Plattformen hinweg. Weitere Informationen finden Sie in unserer Diskussion zu klassischen Konsolen-APIs im Vergleich zum virtuellen Terminal .

Cursordarstellung und -position

Der Cursor eines Bildschirmpuffers kann sichtbar oder ausgeblendet werden. Wenn es sichtbar ist, kann die Darstellung variieren, von der vollständigen Ausfüllung einer Zeichenzelle bis zur Darstellung als horizontale Linie am unteren Rand der Zelle. Verwenden Sie die GetConsoleCursorInfo-Funktion , um Informationen zur Darstellung und Sichtbarkeit des Cursors abzurufen. Diese Funktion meldet, ob der Cursor sichtbar ist, und beschreibt die Darstellung des Cursors als Prozentsatz einer Zeichenzelle, die er ausfüllt. Verwenden Sie die SetConsoleCursorInfo-Funktion , um die Darstellung und Sichtbarkeit des Cursors festzulegen.

Zeichen, die von den High-Level-Konsolen-E/A-Funktionen geschrieben werden, werden an der aktuellen Cursorposition geschrieben und bewegen den Cursor an die nächste Position. Verwenden Sie GetConsoleScreenBufferInfo, um die aktuelle Cursorposition im Koordinatensystem eines Bildschirmpuffers zu ermitteln. Sie können SetConsoleCursorPosition verwenden, um die Cursorposition festzulegen und damit die Platzierung von Text zu steuern, der von den I/O-Funktionen der obersten Ebene geschrieben oder widergespiegelt wird. Wenn Sie den Cursor verschieben, wird Text an der neuen Cursorposition überschrieben.

Hinweis

Die Verwendung der Funktionen auf niedriger Ebene, um die Cursorposition zu finden, wird abgeraten. Es wird empfohlen, virtuelle Terminalsequenzen zu verwenden, um diese Position bei Bedarf für erweiterte Layouts abzufragen. Weitere Informationen zum Bevorzugen virtueller Terminalsequenzen finden Sie in den klassischen Funktionen im Vergleich zum virtuellen Terminaldokument .

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

Zeichenattribute

Zeichenattribute können in zwei Klassen unterteilt werden: Farbe und DBCS. Die folgenden Attribute werden in der WinCon.h Headerdatei definiert.

Merkmal 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 intensiviert.
BACKGROUND_BLUE Hintergrundfarbe enthält Blau.
BACKGROUND_GREEN Die Hintergrundfarbe enthält Grün.
BACKGROUND_RED Die Hintergrundfarbe enthält Rot.
BACKGROUND_INTENSITY Hintergrundfarbe wird intensiviert.
COMMON_LVB_LEADING_BYTE Führendes Byte.
COMMON_LVB_TRAILING_BYTE Nachgestelltes Byte.
COMMON_LVB_GRID_HORIZONTAL Horizontal oben.
COMMON_LVB_GRID_LVERTICAL Vertikal links.
COMMON_LVB_GRID_RVERTICAL Vertikal rechts.
COMMON_LVB_REVERSE_VIDEO Umgekehrte Vordergrund- und Hintergrundattribute.
COMMON_LVB_UNDERSCORE Unterstreichen.

Die Vordergrundattribute geben die Textfarbe an. Die Hintergrundattribute geben die Farbe an, die verwendet wird, um den Hintergrund der Zelle auszufüllen. Die anderen Attribute werden mit DBCS verwendet.

Eine Anwendung kann die Vordergrund- und Hintergrundkonstanten kombinieren, um unterschiedliche Farben zu erzielen. Die folgende Kombination führt z. B. zu hellem Zyan-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. Die folgende Kombination erzeugt beispielsweise schwarzen Text auf einem weißen Hintergrund. Rot, Grün und Blau werden für den Hintergrund angegeben, der mit einem weißen Hintergrund kombiniert wird. Für den Vordergrund werden keine Kennzeichnungsfarben angegeben, sodass sie schwarz ist.

BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED

Jede Bildschirmpufferzeichenzelle speichert die Farbattribute für die Farben, die beim Zeichnen des Vordergrunds (Text) und des Hintergrunds dieser Zelle verwendet werden. Eine Anwendung kann die Farbdaten für jede Zeichenzelle einzeln festlegen und die Daten im Attributes-Element der CHAR_INFO Struktur für jede Zelle speichern. Die aktuellen Textattribute jedes Bildschirmpuffers werden für Zeichen verwendet, die anschließend von den Funktionen auf hoher Ebene geschrieben oder widergespiegelt werden.

Eine Anwendung kann GetConsoleScreenBufferInfo verwenden, um die aktuellen Textattribute eines Bildschirmpuffers und die SetConsoleTextAttribute-Funktion festzulegen, um die Zeichenattribute festzulegen. Das Ändern der Attribute eines Bildschirmpuffers wirkt sich nicht auf die Anzeige zuvor geschriebener Zeichen aus. Diese Textattribute wirken sich nicht auf Zeichen aus, die von den I/O-Funktionen der Unteren Ebene geschrieben wurden (z. B. writeConsoleOutput OderWriteConsoleOutputCharacter ), die entweder explizit die Attribute für jede Zelle angeben, die geschrieben wird oder die Attribute unverändert lassen.

Hinweis

Die Verwendung der Funktionen auf niedriger Ebene zum Bearbeiten von Standard- und bestimmten Textattributen wird abgeraten. Es wird empfohlen, virtuelle Terminalsequenzen zum Festlegen von Textattributen zu verwenden. Weitere Informationen zum Bevorzugen virtueller Terminalsequenzen finden Sie in den klassischen Funktionen im Vergleich zum virtuellen Terminaldokument .

Schriftartattribute

Die GetCurrentConsoleFont-Funktion ruft Informationen zur aktuellen Konsolenschriftart ab. Die in der CONSOLE_FONT_INFO Struktur gespeicherten Informationen enthalten die Breite und Höhe jedes Zeichens in der Schriftart.

Die GetConsoleFontSize-Funktion ruft den Schriftgrad ab, der vom angegebenen Konsolenbildschirmpuffer verwendet wird.

Hinweis

Die Verwendung von Funktionen zum Suchen und Bearbeiten von Schriftartinformationen wird abgeraten. Es wird empfohlen, Befehlszeilenanwendungen auf neutrale Weise zu verwenden, um plattformübergreifende Kompatibilität sowie Kompatibilität mit Hostumgebungen sicherzustellen, mit denen der Benutzer die Schriftart anpassen kann. Weitere Informationen zu Benutzereinstellungen und Hostumgebungen, einschließlich Terminals, finden Sie in der Roadmap des Ökosystems.