Delen via


Consoleschermbuffers

Een schermbuffer is een tweedimensionale matrix met teken- en kleurgegevens voor uitvoer in een consolevenster. Een console kan meerdere schermbuffers hebben. De actieve schermbuffer is de buffer die op het scherm wordt weergegeven.

Het systeem maakt een schermbuffer wanneer er een nieuwe console wordt gemaakt. Als u een ingang wilt openen voor de actieve schermbuffer van een console, geeft u de CONOUT$ -waarde op in een aanroep naar de functie CreateFile . Een proces kan de functie CreateConsoleScreenBuffer gebruiken om extra schermbuffers te maken voor de console. Een nieuwe schermbuffer is pas actief als de ingang is opgegeven in een aanroep naar de functie SetConsoleActiveScreenBuffer . Schermbuffers kunnen echter worden geopend voor lezen en schrijven, ongeacht of ze actief of inactief zijn.

Elke schermbuffer heeft een eigen tweedimensionale matrix met tekengegevensrecords. De gegevens voor elk teken worden opgeslagen in een CHAR_INFO structuur waarmee het Unicode- of ANSI-teken en de voorgrond- en achtergrondkleuren worden opgegeven waarin dat teken wordt weergegeven.

Een aantal eigenschappen die aan een schermbuffer zijn gekoppeld, kunnen afzonderlijk worden ingesteld voor elke schermbuffer. Dit betekent dat het wijzigen van de actieve schermbuffer een dramatisch effect kan hebben op het uiterlijk van het consolevenster. De eigenschappen die zijn gekoppeld aan een schermbuffer zijn onder andere:

  • Schermbuffergrootte, in tekenrijen en kolommen.
  • Tekstkenmerken (voorgrond- en achtergrondkleuren voor het weergeven van tekst die moeten worden geschreven door de functie WriteFile of WriteConsole ).
  • Venstergrootte en -locatie (het rechthoekige gebied van de consoleschermbuffer die wordt weergegeven in het consolevenster).
  • Cursorpositie, uiterlijk en zichtbaarheid.
  • Uitvoermodi (ENABLE_PROCESSED_OUTPUT en ENABLE_WRAP_AT_EOL_OUTPUT). Zie High-Level Consolemodi voor meer informatie over console-uitvoermodi.

Wanneer er een schermbuffer wordt gemaakt, bevat deze spatietekens op elke positie. De cursor is zichtbaar en geplaatst op de oorsprong van de buffer (0,0) en het venster wordt in de linkerbovenhoek van de buffer geplaatst. De grootte van de consoleschermbuffer, de venstergrootte, de tekstkenmerken en het uiterlijk van de cursor worden bepaald door de gebruiker of door de standaardinstellingen van het systeem. Gebruik de functies GetConsoleScreenBufferInfo, GetConsoleCursorInfo en GetConsoleMode om de huidige waarden op te halen van de verschillende eigenschappen die zijn gekoppeld aan de consoleschermbuffer.

Toepassingen die een van de eigenschappen van de consoleschermbuffer wijzigen, moeten hun eigen schermbuffer maken of de status van de overgenomen schermbuffer opslaan tijdens het opstarten en herstellen bij het afsluiten. Dit coöperatieve gedrag is vereist om ervoor te zorgen dat andere toepassingen die dezelfde consolesessie delen, niet worden beïnvloed door de wijzigingen.

Aanbeveling

Het wordt aanbevolen om de alternatieve buffermodus in de toekomst te gebruiken, indien mogelijk, in plaats van een tweede schermbuffer te maken voor dit doel. Alternatieve buffermodus biedt verbeterde compatibiliteit op externe apparaten en met andere platforms. Raadpleeg onze discussie over klassieke console-API's versus virtuele terminal voor meer informatie.

Uiterlijk en positie van cursor

De cursor van een schermbuffer kan zichtbaar of verborgen zijn. Wanneer het zichtbaar is, kan het uiterlijk variëren, variërend van het volledig vullen van een tekencel tot een horizontale lijn onder aan de cel. Gebruik de functie GetConsoleCursorInfo om informatie over het uiterlijk en de zichtbaarheid van de cursor op te halen. Deze functie rapporteert of de cursor zichtbaar is en beschrijft het uiterlijk van de cursor als het percentage van een tekencel die wordt gevuld. Als u het uiterlijk en de zichtbaarheid van de cursor wilt instellen, gebruikt u de functie SetConsoleCursorInfo .

Tekens die zijn geschreven door de console-I/O-functies op hoog niveau , worden geschreven op de huidige cursorlocatie, waarbij de cursor naar de volgende locatie gaat. Gebruik GetConsoleScreenBufferInfo om de huidige cursorpositie in het coördinaatsysteem van een schermbuffer te bepalen. U kunt SetConsoleCursorPosition gebruiken om de cursorpositie in te stellen en zo de positie van de tekst te bepalen die is geschreven of herhaald door de I/O-functies op hoog niveau. Als u de cursor verplaatst, wordt tekst op de nieuwe cursorlocatie overschreven.

Opmerking

Het gebruik van de functies op laag niveau om de cursorpositie te vinden, wordt afgeraden. Het wordt aanbevolen om virtuele terminalreeksen te gebruiken om deze positie zo nodig op te vragen voor geavanceerde indelingen. Meer informatie over het voorkeur geven aan virtuele terminalreeksen vindt u in de klassieke functies versus het document met virtuele terminal .

De positie, het uiterlijk en de zichtbaarheid van de cursor worden afzonderlijk ingesteld voor elke schermbuffer.

Tekenkenmerken

Tekenkenmerken kunnen worden onderverdeeld in twee klassen: kleur en DBCS. De volgende kenmerken worden gedefinieerd in het WinCon.h headerbestand.

Eigenschap Betekenis
FOREGROUND_BLUE Tekstkleur bevat blauw.
FOREGROUND_GREEN Tekstkleur bevat groen.
FOREGROUND_RED Tekstkleur bevat rood.
FOREGROUND_INTENSITY Tekstkleur wordt geïntensiveerd.
BACKGROUND_BLUE Achtergrondkleur bevat blauw.
BACKGROUND_GREEN Achtergrondkleur bevat groen.
BACKGROUND_RED Achtergrondkleur bevat rood.
BACKGROUND_INTENSITY Achtergrondkleur wordt geïntensiveerd.
COMMON_LVB_LEADING_BYTE Voorloop byte.
COMMON_LVB_TRAILING_BYTE Afsluitende byte.
COMMON_LVB_GRID_HORIZONTAL Boven horizontaal.
COMMON_LVB_GRID_LVERTICAL Verticaal links.
COMMON_LVB_GRID_RVERTICAL Verticaal rechts.
COMMON_LVB_REVERSE_VIDEO Omgekeerde voorgrond- en achtergrondkenmerken.
COMMON_LVB_UNDERSCORE Onderstrepen.

De voorgrondkenmerken geven de tekstkleur op. De achtergrondkenmerken geven de kleur op die wordt gebruikt om de achtergrond van de cel op te vullen. De andere kenmerken worden gebruikt met DBCS.

Een toepassing kan de voorgrond- en achtergrondconstanten combineren om verschillende kleuren te bereiken. De volgende combinatie resulteert bijvoorbeeld in heldere cyaan tekst op een blauwe achtergrond.

FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_BLUE

Als er geen achtergrondconstante is opgegeven, is de achtergrond zwart en als er geen voorgrondconstante is opgegeven, is de tekst zwart. De volgende combinatie produceert bijvoorbeeld zwarte tekst op een witte achtergrond. Rood, groen en blauw worden opgegeven voor de achtergrond die wordt gecombineerd tot een witte achtergrond. Er worden geen vlagkleuren opgegeven voor de voorgrond, zodat deze zwart is.

BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED

In elke cel met buffertekens worden de kleurkenmerken opgeslagen voor de kleuren die worden gebruikt bij het tekenen van de voorgrond (tekst) en de achtergrond van die cel. Een toepassing kan de kleurgegevens voor elke cel afzonderlijk instellen, waarbij de gegevens in het lid Kenmerken van de CHAR_INFO structuur voor elke cel worden opgeslagen. De huidige tekstkenmerken van elke schermbuffer worden gebruikt voor tekens die vervolgens worden geschreven of herhaald door de functies op hoog niveau.

Een toepassing kan GetConsoleScreenBufferInfo gebruiken om de huidige tekstkenmerken van een schermbuffer en de functie SetConsoleTextAttribute te bepalen om de tekenkenmerken in te stellen. Het wijzigen van de kenmerken van een schermbuffer heeft geen invloed op de weergave van eerder geschreven tekens. Deze tekstkenmerken hebben geen invloed op tekens die zijn geschreven door de I/O-functies van de console op laag niveau (zoals de functie WriteConsoleOutput of WriteConsoleOutputCharacter ), die expliciet de kenmerken opgeven voor elke cel die is geschreven of de kenmerken ongewijzigd laten.

Opmerking

Het gebruik van de functies op laag niveau om standaard- en specifieke tekstkenmerken te bewerken, wordt afgeraden. Het wordt aanbevolen om virtuele terminalreeksen te gebruiken om tekstkenmerken in te stellen. Meer informatie over het voorkeur geven aan virtuele terminalreeksen vindt u in de klassieke functies versus het document met virtuele terminal .

Lettertypekenmerken

De functie GetCurrentConsoleFont haalt informatie over het huidige consolelettertype op. De informatie die is opgeslagen in de CONSOLE_FONT_INFO structuur bevat de breedte en hoogte van elk teken in het lettertype.

Met de functie GetConsoleFontSize wordt de grootte opgehaald van het lettertype dat wordt gebruikt door de opgegeven consoleschermbuffer.

Opmerking

Het gebruik van functies voor het zoeken en bewerken van lettertype-informatie wordt afgeraden. Het is raadzaam om opdrachtregeltoepassingen op een neutrale manier te gebruiken om compatibiliteit tussen platforms en compatibiliteit met hostomgevingen te garanderen waarmee de gebruiker het lettertype kan aanpassen. Zie de roadmap voor het ecosysteem voor meer informatie over gebruikersvoorkeuren en hostomgevingen, waaronder terminals.