Megosztás:


Konzol képernyőpufferei

A képernyőpuffer egy karakter- és színadatok kétdimenziós tömbje a konzolablakban való kimenethez. Egy konzol több képernyőpufferrel is rendelkezhet. Az aktív képernyőpuffer az, amely megjelenik a képernyőn.

A rendszer egy képernyőpuffert hoz létre, amikor új konzolt hoz létre. Ha meg szeretne nyitni egy fogópontot egy konzol aktív képernyőpufferéhez, adja meg a CONOUT$ értéket a CreateFile függvény hívásában. A folyamat a CreateConsoleScreenBuffer függvénnyel további képernyőpuffereket hozhat létre a konzoljához. Az új képernyőpuffer nem aktív, amíg a leírója meg nem van adva a SetConsoleActiveScreenBuffer függvény hívásában. A képernyőpufferek azonban olvasáshoz és íráshoz is elérhetők, függetlenül attól, hogy aktívak vagy inaktívak.

Minden képernyőpuffer saját kétdimenziós karakterinformációs rekordokkal rendelkezik. Az egyes karakterek adatait egy CHAR_INFO struktúrában tárolja, amely meghatározza a Unicode- vagy ANSI-karaktert, valamint az előtér- és háttérszíneket, amelyekben a karakter megjelenik.

A képernyőpufferhez társított tulajdonságok száma egymástól függetlenül állítható be az egyes képernyőpufferekhez. Ez azt jelenti, hogy az aktív képernyőpuffer módosítása drámai hatással lehet a konzolablak megjelenésére. A képernyőpufferhez társított tulajdonságok a következők:

  • Képernyőpuffer mérete karaktersorokban és oszlopokban.
  • Szövegattribútumok (előtér- és háttérszínek a WriteFile vagy a WriteConsole függvény által írandó szöveg megjelenítéséhez).
  • Ablak mérete és helye (a konzolképernyő pufferének téglalap alakú régiója, amely a konzolablakban jelenik meg).
  • Kurzor pozíciója, megjelenése és láthatósága.
  • Kimeneti módok (ENABLE_PROCESSED_OUTPUT és ENABLE_WRAP_AT_EOL_OUTPUT). A konzolkimeneti módokkal kapcsolatos további információkért lásd High-Level konzol módokat.

A képernyőpuffer létrehozásakor minden helyzetben szóköz karaktereket tartalmaz. A kurzor látható és a puffer forrásánál van elhelyezve (0,0), és az ablak a bal felső sarokban van a puffer forrásánál. A konzol képernyőpufferének méretét, az ablak méretét, a szövegattribútumokat és a kurzor megjelenését a felhasználó vagy a rendszer alapértelmezése határozza meg. A konzol képernyőpufferéhez társított különböző tulajdonságok aktuális értékeinek lekéréséhez használja a GetConsoleScreenBufferInfo, a GetConsoleCursorInfo és a GetConsoleMode függvényt.

A konzol képernyőpuffertulajdonságait módosító alkalmazásoknak saját képernyőpuffert kell létrehozniuk, vagy menteniük kell az örökölt képernyőpuffer állapotát az indítás során, és vissza kell állítaniuk a kilépéskor. Ez a kooperatív viselkedés szükséges annak biztosításához, hogy az ugyanazon a konzol munkameneten osztozó többi alkalmazásra ne legyenek hatással a változások.

Jótanács

Javasoljuk, hogy ha lehetséges, használja az alternatív puffer módot ahelyett, hogy egy második képernyőpuffert hoz létre erre a célra. Az alternatív puffer mód nagyobb kompatibilitást biztosít a távoli eszközök és más platformok között. További információért tekintse meg a klasszikus konzol API-kkal és virtuális terminállal kapcsolatos vitafórumunkat.

Kurzor megjelenése és pozíciója

A képernyőpuffer kurzora látható vagy rejtett lehet. Ha látható, a megjelenése változhat, a karaktercellák teljes kitöltésétől a cella alján vízszintes vonalként való megjelenésig. A kurzor megjelenésével és láthatóságával kapcsolatos információk lekéréséhez használja a GetConsoleCursorInfo függvényt. Ez a függvény azt jelzi, hogy a kurzor látható-e, és a kurzor megjelenését a kitöltendő karaktercellák százalékos arányaként írja le. A kurzor megjelenésének és láthatóságának beállításához használja a SetConsoleCursorInfo függvényt.

A magas szintű konzol I/O-függvényei által írt karakterek a kurzor aktuális helyén vannak megírva, és a kurzort a következő helyre irányítják. A képernyőpuffer koordinátarendszerében a kurzor aktuális pozíciójának meghatározásához használja a GetConsoleScreenBufferInfo parancsot. A SetConsoleCursorPosition használatával beállíthatja a kurzor pozícióját, és ezáltal szabályozhatja a magas szintű I/O-függvények által írt vagy visszhangzott szövegek elhelyezését. Ha áthelyezi a kurzort, az új kurzor helyén lévő szöveg felülíródik.

Megjegyzés:

Az alacsony szintű függvények használata a kurzor pozíciójának megkereséséhez nem ajánlott. Ha speciális elrendezésekhez szükséges, ajánlott virtuális terminálütemezésekkel lekérdezni ezt a pozíciót. A virtuális terminálütemezések előnyben részesítéséről további információt a klasszikus függvények és a virtuális termináldokumentum tartalmaz.

A kurzor pozíciója, megjelenése és láthatósága egymástól függetlenül van beállítva az egyes képernyőpufferekhez.

Karakterattribútumok

A karakterattribútumok két osztályra oszthatók: színre és DBCS-re. A fejlécfájlban az WinCon.h alábbi attribútumok vannak definiálva.

Jellemző Értelmezés
FOREGROUND_BLUE A szöveg színe kék.
FOREGROUND_GREEN A szöveg színe zöld.
FOREGROUND_RED A szöveg színe piros.
FOREGROUND_INTENSITY A szövegszín felerősödik.
BACKGROUND_BLUE A háttérszín kék színt tartalmaz.
BACKGROUND_GREEN A háttérszín zöld színt tartalmaz.
BACKGROUND_RED A háttérszín piros színt tartalmaz.
BACKGROUND_INTENSITY A háttérszín felerősödik.
COMMON_LVB_LEADING_BYTE Kezdő bájt.
COMMON_LVB_TRAILING_BYTE Záró bájt.
COMMON_LVB_GRID_HORIZONTAL Felül vízszintesen.
COMMON_LVB_GRID_LVERTICAL Balra függőlegesen.
COMMON_LVB_GRID_RVERTICAL Jobbra függőlegesen.
COMMON_LVB_REVERSE_VIDEO Előtér- és háttérattribútumok megfordítása.
COMMON_LVB_UNDERSCORE Aláhúz.

Az előtérben lévő attribútumok határozzák meg a szöveg színét. A háttérattribútumok határozzák meg a cella hátterének kitöltéséhez használt színt. A többi attribútumot a DBCS használja.

Az alkalmazások az előtér- és háttérállandókat kombinálva különböző színeket érhetnek el. Az alábbi kombináció például világos ciánszöveget eredményez kék háttéren.

FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_BLUE

Ha nincs megadva háttérállandó, a háttér fekete, és ha nincs megadva előtérállandó, a szöveg fekete. Az alábbi kombináció például fekete szöveget eredményez fehér háttéren. A fehér háttérhez piros, zöld és kék szín van megadva. Az előtérben nincs megadva jelölőszín, ezért fekete.

BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED

Minden képernyőpuffer karaktercellája tárolja a cella előterének (szövegének) és hátterének rajzolásához használt színek színattribútumait. Az alkalmazások egyenként állíthatják be az egyes karaktercellák színadatait, és az adatokat az egyes cellák CHAR_INFO struktúrájának attribútumai között tárolhatják. Az egyes képernyőpufferek aktuális szövegattribútumait a rendszer a magas szintű függvények által később írt vagy visszhangzott karakterekhez használja.

Az alkalmazások a GetConsoleScreenBufferInfo segítségével határozhatják meg a képernyőpuffer aktuális szöveges attribútumait, valamint a SetConsoleTextAttribute függvényt a karakterattribútumok beállításához. A képernyőpuffer attribútumainak módosítása nem befolyásolja a korábban írt karakterek megjelenítését. Ezek a szöveges attribútumok nem befolyásolják az alacsony szintű konzol I/O-függvényei (például a WriteConsoleOutput vagy a WriteConsoleOutputCharacter függvény) által írt karaktereket, amelyek vagy explicit módon adják meg az attribútumokat az egyes írt cellákhoz, vagy változatlanul hagyják az attribútumokat.

Megjegyzés:

Az alacsony szintű függvények használata az alapértelmezett és adott szövegattribútumok manipulálására nem ajánlott. A szövegattribútumok beállításához ajánlott virtuális terminálütemezéseket használni. A virtuális terminálütemezések előnyben részesítéséről további információt a klasszikus függvények és a virtuális termináldokumentum tartalmaz.

Betűtípusattribútumok

A GetCurrentConsoleFont függvény adatokat kér le az aktuális konzol betűtípusáról. A CONSOLE_FONT_INFO struktúrában tárolt információk tartalmazzák a betűtípus egyes karaktereinek szélességét és magasságát.

A GetConsoleFontSize függvény lekéri a megadott konzolképernyő-puffer által használt betűtípus méretét.

Megjegyzés:

A függvények használata a betűtípusok információinak megkereséséhez és kezeléséhez nem ajánlott. Javasoljuk, hogy a parancssori alkalmazásokat betűsemleges módon működtesse, hogy biztosítsa a platformfüggetlen kompatibilitást, valamint a gazdakörnyezetekkel való kompatibilitást, amelyek lehetővé teszik a felhasználó számára a betűtípus testreszabását. További információ a felhasználói beállításokról és a gazdagépkörnyezetekről, beleértve a terminálokat is, tekintse meg az ökoszisztéma ütemtervét.