Dela via


Konsolskärmsbuffertar

En skärmbuffert är en tvådimensionell matris med tecken- och färgdata för utdata i ett konsolfönster. En konsol kan ha flera skärmbuffertar. Den aktiva skärmbufferten är den som visas på skärmen.

Systemet skapar en skärmbuffert när den skapar en ny konsol. Om du vill öppna en referens till en konsols aktiva skärmbuffert anger du CONOUT$ -värdet i ett anrop till funktionen CreateFile . En process kan använda funktionen CreateConsoleScreenBuffer för att skapa ytterligare skärmbuffertar för konsolen. En ny skärmbuffert är inte aktiv förrän dess handtag har angetts i ett anrop till funktionen SetConsoleActiveScreenBuffer . Skärmbuffertar kan dock nås för att läsa och skriva om de är aktiva eller inaktiva.

Varje skärmbuffert har en egen tvådimensionell matris med teckeninformationsposter. Data för varje tecken lagras i en CHAR_INFO struktur som anger Unicode- eller ANSI-tecknet och förgrunds- och bakgrundsfärgerna där tecknet visas.

Ett antal egenskaper som är associerade med en skärmbuffert kan anges separat för varje skärmbuffert. Det innebär att en ändring av den aktiva skärmbufferten kan ha en dramatisk effekt på konsolfönstrets utseende. Egenskaperna som är associerade med en skärmbuffert är:

  • Skärmbuffertstorlek, i teckenrader och kolumner.
  • Textattribut (förgrunds- och bakgrundsfärger för att visa text som ska skrivas av funktionen WriteFile eller WriteConsole ).
  • Fönsterstorlek och plats (den rektangulära regionen för konsolskärmsbufferten som visas i konsolfönstret).
  • Markörposition, utseende och synlighet.
  • Utdatalägen (ENABLE_PROCESSED_OUTPUT och ENABLE_WRAP_AT_EOL_OUTPUT). Mer information om konsolens utdatalägen finns iHigh-Level Konsollägen.

När en skärmbuffert skapas innehåller den blankstegstecken i varje position. Markören är synlig och placerad vid buffertens ursprung (0,0), och fönstret placeras med det övre vänstra hörnet vid buffertens ursprung. Storleken på konsolskärmsbufferten, fönsterstorleken, textattributen och markörens utseende bestäms av användaren eller systemets standardvärden. Om du vill hämta de aktuella värdena för de olika egenskaper som är associerade med konsolskärmsbufferten använder du funktionerna GetConsoleScreenBufferInfo, GetConsoleCursorInfo och GetConsoleMode .

Program som ändrar någon av egenskaperna för konsolskärmens buffert bör antingen skapa en egen skärmbuffert eller spara tillståndet för den ärvda skärmbufferten under starten och återställa den vid avslut. Det här samarbetsbeteendet krävs för att säkerställa att andra program som delar samma konsolsession inte påverkas av ändringarna.

Tips/Råd

Vi rekommenderar att du använder det alternativa buffertläget framöver, om möjligt, i stället för att skapa en andra skärmbuffert för detta ändamål. Alternativt buffertläge ger ökad kompatibilitet mellan fjärrenheter och med andra plattformar. Mer information finns i vår diskussion om klassiska konsol-API:er jämfört med virtuell terminal .

Markörens utseende och position

En skärmbufferts markör kan vara synlig eller dold. När den är synlig kan dess utseende variera, allt från att helt fylla en teckencell till att visas som en vågrät linje längst ned i cellen. Om du vill hämta information om markörens utseende och synlighet använder du funktionen GetConsoleCursorInfo . Den här funktionen rapporterar om markören är synlig och beskriver markörens utseende som procentandelen av en teckencell som den fyller. Om du vill ange markörens utseende och synlighet använder du funktionen SetConsoleCursorInfo .

Tecken som skrivs av konsol-I/O-funktionerna på hög nivå skrivs på den aktuella markörens plats och flyttar markören till nästa plats. Om du vill fastställa den aktuella markörens position i koordinatsystemet för en skärmbuffert använder du GetConsoleScreenBufferInfo. Du kan använda SetConsoleCursorPosition för att ange markörens position och därmed styra placeringen av text som skrivs eller upprepas av I/O-funktionerna på hög nivå. Om du flyttar markören skrivs text på den nya markörens plats över.

Anmärkning

Det rekommenderas inte att använda funktionerna på låg nivå för att hitta markörens position. Vi rekommenderar att du använder virtuella terminalsekvenser för att fråga efter den här positionen om det behövs för avancerade layouter. Mer information om hur du föredrar virtuella terminalsekvenser finns i de klassiska funktionerna jämfört med det virtuella terminaldokumentet .

Markörens position, utseende och synlighet anges separat för varje skärmbuffert.

Teckenattribut

Teckenattribut kan delas in i två klasser: färg och DBCS. Följande attribut definieras i WinCon.h huvudfilen.

Egenskap Innebörd
FOREGROUND_BLUE Textfärgen innehåller blått.
FOREGROUND_GREEN Textfärgen innehåller grönt.
FOREGROUND_RED Textfärgen innehåller rött.
FOREGROUND_INTENSITY Textfärgen intensifieras.
BACKGROUND_BLUE Bakgrundsfärgen innehåller blått.
BACKGROUND_GREEN Bakgrundsfärgen innehåller grönt.
BACKGROUND_RED Bakgrundsfärgen innehåller rött.
BACKGROUND_INTENSITY Bakgrundsfärgen intensifieras.
COMMON_LVB_LEADING_BYTE Inledande byte.
COMMON_LVB_TRAILING_BYTE Avslutande byte.
COMMON_LVB_GRID_HORIZONTAL Vågrät överkant.
COMMON_LVB_GRID_LVERTICAL Vänster lodrätt.
COMMON_LVB_GRID_RVERTICAL Höger lodrätt.
COMMON_LVB_REVERSE_VIDEO Attribut för omvänd förgrund och bakgrund.
COMMON_LVB_UNDERSCORE Understreck.

Förgrundsattributen anger textfärgen. Bakgrundsattributen anger den färg som används för att fylla cellens bakgrund. De andra attributen används med DBCS.

Ett program kan kombinera förgrunds- och bakgrundskonstanterna för att uppnå olika färger. Följande kombination resulterar till exempel i ljus cyan text på en blå bakgrund.

FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_BLUE

Om ingen bakgrundskonstant anges är bakgrunden svart och om ingen förgrundskonstant har angetts är texten svart. Följande kombination ger till exempel svart text i en vit bakgrund. Röd, grön och blå anges för bakgrunden som kombineras till en vit bakgrund. Inga flaggfärger har angetts för förgrunden så den är svart.

BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED

Varje skärmbuffertteckencell lagrar färgattributen för de färger som används för att rita förgrunden (text) och bakgrunden till cellen. Ett program kan ange färgdata för varje teckencell individuellt och lagra data i attributmedlemmen i den CHAR_INFO strukturen för varje cell. De aktuella textattributen för varje skärmbuffert används för tecken som senare skrivs eller upprepas av högnivåfunktionerna.

Ett program kan använda GetConsoleScreenBufferInfo för att fastställa de aktuella textattributen för en skärmbuffert och funktionen SetConsoleTextAttribute för att ange teckenattributen. Om du ändrar en skärmbufferts attribut påverkas inte visningen av tecken som tidigare skrivits. Dessa textattribut påverkar inte tecken som skrivs av I/O-funktionerna på låg nivå (till exempel funktionen WriteConsoleOutput eller WriteConsoleOutputCharacter ), som antingen uttryckligen anger attributen för varje cell som skrivs eller lämnar attributen oförändrade.

Anmärkning

Det rekommenderas inte att använda funktionerna på låg nivå för att ändra standardattribut och specifika textattribut. Vi rekommenderar att du använder virtuella terminalsekvenser för att ange textattribut. Mer information om hur du föredrar virtuella terminalsekvenser finns i de klassiska funktionerna jämfört med det virtuella terminaldokumentet .

Teckensnittsattribut

Funktionen GetCurrentConsoleFont hämtar information om det aktuella konsolteckensnittet. Informationen som lagras i CONSOLE_FONT_INFO struktur innehåller bredden och höjden på varje tecken i teckensnittet.

Funktionen GetConsoleFontSize hämtar storleken på det teckensnitt som används av den angivna konsolskärmsbufferten.

Anmärkning

Det rekommenderas inte att använda funktioner för att hitta och ändra teckensnittsinformation. Vi rekommenderar att du använder kommandoradsprogram på ett teckensnittsneutralt sätt för att säkerställa plattformsoberoende kompatibilitet samt kompatibilitet med värdmiljöer som gör att användaren kan anpassa teckensnittet. Mer information om användarinställningar och värdmiljöer, inklusive terminaler, finns i översikten över ekosystemet.