Sdílet prostřednictvím


Vyrovnávací paměti obrazovky konzoly

Vyrovnávací paměť obrazovky je dvojrozměrné pole znaků a barevných dat pro výstup v okně konzoly. Konzola může mít více vyrovnávacích pamětí obrazovky. Aktivní vyrovnávací paměť obrazovky je ta, která se zobrazuje na obrazovce.

Systém vytvoří vyrovnávací paměť obrazovky pokaždé, když vytvoří novou konzolu. Pokud chcete otevřít popisovač pro aktivní vyrovnávací paměť obrazovky konzoly, zadejte hodnotu CONOUT$ ve volání funkce CreateFile . Proces může použít funkci CreateConsoleScreenBuffer k vytvoření dalších vyrovnávacích pamětí obrazovky pro svou konzolu. Nová vyrovnávací paměť obrazovky není aktivní, dokud nebude jeho popisovač zadán ve volání Funkce SetConsoleActiveScreenBuffer . Vyrovnávací paměti obrazovky se ale dají přistupovat ke čtení a zápisu bez ohledu na to, jestli jsou aktivní nebo neaktivní.

Každá vyrovnávací paměť obrazovky má vlastní dvojrozměrné pole záznamů informací znaků. Data pro každý znak jsou uložena v CHAR_INFO struktuře , která určuje znak Unicode nebo ANSI a barvy popředí a pozadí, ve kterých je tento znak zobrazen.

Pro každou vyrovnávací paměť obrazovky lze nezávisle nastavit řadu vlastností přidružených k vyrovnávací paměti obrazovky. To znamená, že změna aktivní vyrovnávací paměti obrazovky může mít výrazný vliv na vzhled okna konzoly. Mezi vlastnosti přidružené k vyrovnávací paměti obrazovky patří:

  • Velikost vyrovnávací paměti obrazovky v řádcích a sloupcích znaků
  • Atributy textu (popředí a barvy pozadí pro zobrazení textu, který se má zapsat funkcí WriteFile nebo WriteConsole ).
  • Velikost a umístění okna (obdélníková oblast vyrovnávací paměti obrazovky konzoly zobrazená v okně konzoly).
  • Umístění, vzhled a viditelnost kurzoru
  • Výstupní režimy (ENABLE_PROCESSED_OUTPUT a ENABLE_WRAP_AT_EOL_OUTPUT). Další informace o režimech výstupu konzoly naleznete v tématu High-Level Režimy konzoly.

Při vytvoření vyrovnávací paměti obrazovky obsahuje mezery na každé pozici. Kurzor je viditelný a umístěný na počátku vyrovnávací paměti (0,0) a okno se umístí do levého horního rohu v počátku vyrovnávací paměti. Velikost vyrovnávací paměti obrazovky konzoly, velikost okna, atributy textu a vzhled kurzoru jsou určeny uživatelem nebo výchozím nastavením systému. Chcete-li načíst aktuální hodnoty různých vlastností přidružených ke vyrovnávací paměti obrazovky konzoly, použijte funkce GetConsoleScreenBufferInfo, GetConsoleCursorInfo a GetConsoleMode .

Aplikace, které změní některou z vlastností vyrovnávací paměti obrazovky konzoly, by měly buď vytvořit vlastní vyrovnávací paměť obrazovky, nebo uložit stav zděděné vyrovnávací paměti obrazovky při spuštění a obnovit ji při ukončení. Toto chování spolupráce se vyžaduje, aby změny neměly vliv na jiné aplikace sdílející stejnou relaci konzoly.

Tip

Pokud je to možné, doporučuje se místo vytvoření druhé vyrovnávací paměti pro tento účel použít alternativní režim vyrovnávací paměti . Alternativní režim vyrovnávací paměti nabízí zvýšenou kompatibilitu mezi vzdálenými zařízeními a s jinými platformami. Další informace najdete v naší diskuzi o klasických rozhraních API konzoly a virtuálním terminálu .

Vzhled a umístění kurzoru

Kurzor vyrovnávací paměti obrazovky může být viditelný nebo skrytý. Když je vidět, jeho vzhled se může lišit v rozsahu od úplné vyplnění buňky znaku, aby se zobrazila jako vodorovná čára v dolní části buňky. Chcete-li načíst informace o vzhledu a viditelnosti kurzoru, použijte funkci GetConsoleCursorInfo . Tato funkce hlásí, zda je kurzor viditelný a popisuje vzhled kurzoru jako procento buňky znaku, kterou vyplní. Pokud chcete nastavit vzhled a viditelnost kurzoru, použijte funkci SetConsoleCursorInfo .

Znaky napsané funkcemi vstupně-výstupních operací konzoly jsou napsány v aktuálním umístění kurzoru a posunují kurzor na další místo. Chcete-li určit aktuální pozici kurzoru v souřadnicovém systému vyrovnávací paměti obrazovky, použijte GetConsoleScreenBufferInfo. Pomocí SetConsoleCursorPosition můžete nastavit pozici kurzoru a tím řídit umístění textu, který je napsaný nebo ozvěna funkcemi vstupně-výstupních operací vysoké úrovně. Pokud kurzor přesunete, text v novém umístění kurzoru se přepíše.

Poznámka:

Použití funkcí nízké úrovně k nalezení pozice kurzoru se nedoporučuje. K dotazování na tuto pozici v případě potřeby pro pokročilá rozložení se doporučuje použít sekvence virtuálních terminálů . Další informace o preferování posloupností virtuálních terminálů najdete v klasických funkcích a v dokumentu virtuálního terminálu .

Pozice, vzhled a viditelnost kurzoru jsou pro každou vyrovnávací paměť obrazovky nastaveny nezávisle.

Atributy znaků

Atributy znaků lze rozdělit do dvou tříd: barva a dbCS. Následující atributy jsou definovány v WinCon.h souboru hlavičky.

Vlastnost Význam
FOREGROUND_BLUE Barva textu obsahuje modrou.
FOREGROUND_GREEN Barva textu obsahuje zelenou barvu.
FOREGROUND_RED Barva textu obsahuje červenou barvu.
FOREGROUND_INTENSITY Barva textu je zesílena.
BACKGROUND_BLUE Barva pozadí obsahuje modrou barvu.
BACKGROUND_GREEN Barva pozadí obsahuje zelenou barvu.
BACKGROUND_RED Barva pozadí obsahuje červenou barvu.
BACKGROUND_INTENSITY Barva pozadí je zesílena.
COMMON_LVB_LEADING_BYTE Úvodní bajt.
COMMON_LVB_TRAILING_BYTE Koncové bajty.
COMMON_LVB_GRID_HORIZONTAL Vodorovně nahoře.
COMMON_LVB_GRID_LVERTICAL Levý svislý.
COMMON_LVB_GRID_RVERTICAL Pravý svislý.
COMMON_LVB_REVERSE_VIDEO Obrácení atributů popředí a pozadí
COMMON_LVB_UNDERSCORE Podtrhnout.

Atributy popředí určují barvu textu. Atributy pozadí určují barvu použitou k vyplnění pozadí buňky. Ostatní atributy se používají se službou DBCS.

Aplikace může kombinovat konstanty popředí a pozadí, aby bylo možné dosáhnout různých barev. Například následující kombinace vede k jasnému azurovém textu na modrém pozadí.

FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_BLUE

Pokud není zadána žádná konstanta pozadí, pozadí je černé a pokud není zadána žádná konstanta popředí, text je černý. Například následující kombinace vytvoří černý text na bílém pozadí. Pro pozadí se zadává červená, zelená a modrá, která kombinuje s bílým pozadím. Pro popředí nejsou zadány žádné barvy příznaku, takže je černá.

BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED

Každá buňka vyrovnávací paměti obrazovky ukládá atributy barev pro barvy použité při kreslení popředí (textu) a pozadí této buňky. Aplikace může pro každou buňku znaku nastavit barevná data jednotlivě a ukládat data do členu atributůCHAR_INFO struktury pro každou buňku. Aktuální textové atributy každé vyrovnávací paměti obrazovky se používají pro znaky následně napsané nebo ozvěny funkcemi vysoké úrovně.

Aplikace může použít GetConsoleScreenBufferInfo k určení aktuální textové atributy vyrovnávací paměti obrazovky a SetConsoleTextAttribute funkce nastavit atributy znaků. Změna atributů vyrovnávací paměti obrazovky nemá vliv na zobrazení znaků, které byly zapsány dříve. Tyto textové atributy nemají vliv na znaky napsané vstupně-výstupními funkcemi konzoly nízké úrovně (například WriteConsoleOutput nebo WriteConsoleOutputCharacter ), které buď explicitně určují atributy pro každou buňku, která je zapsána, nebo ponechat atributy beze změny.

Poznámka:

Použití funkcí nízké úrovně k manipulaci s výchozími a konkrétními textovými atributy se nedoporučuje. K nastavení atributů textu se doporučuje použít sekvence virtuálních terminálů . Další informace o preferování posloupností virtuálních terminálů najdete v klasických funkcích a v dokumentu virtuálního terminálu .

Atributy písma

Funkce GetCurrentConsoleFont načte informace o aktuálním písmu konzoly. Informace uložené ve struktuře CONSOLE_FONT_INFO zahrnují šířku a výšku každého znaku písma.

Funkce GetConsoleFontSize načte velikost písma používaného zadanou vyrovnávací pamětí obrazovky konzoly.

Poznámka:

Použití funkcí k vyhledání a manipulaci s informacemi o písmu se nedoporučuje. Doporučuje se provozovat aplikace příkazového řádku neutrálním způsobem, aby se zajistila kompatibilita mezi platformami a také kompatibilita s hostitelskými prostředími, která uživateli umožňují přizpůsobit písmo. Další informace o uživatelských předvolbách a hostitelských prostředích, včetně terminálů, najdete v přehledu ekosystému.