Condividi tramite


Buffer dello schermo della console

Un buffer dello schermo è una matrice bidimensionale di dati di tipo carattere e colore per l'output in una finestra della console. Una console può avere più buffer dello schermo. Il buffer dello schermo attivo è quello visualizzato sullo schermo.

Il sistema crea un buffer dello schermo ogni volta che viene creata una nuova console. Per aprire un handle per un buffer dello schermo attivo della console, specificare il valore CONOUT$ in una chiamata alla funzione CreateFile. Per creare buffer dello schermo aggiuntivi per la relativa console, un processo può usare la funzione CreateConsoleScreenBuffer. Un nuovo buffer dello schermo non è attivo fino a quando non viene specificato il relativo handle in una chiamata alla funzione SetConsoleActiveScreenBuffer. È tuttavia possibile accedere ai buffer dello schermo per la lettura e la scrittura se sono attivi o inattivi.

Ogni buffer dello schermo presenta una matrice bidimensionale di record di informazioni sui caratteri. I dati per ogni carattere vengono archiviati in una struttura CHAR_INFO che specifica il carattere Unicode o ANSI e i colori di primo piano e di sfondo in cui viene visualizzato il carattere.

Per ogni buffer dello schermo, è possibile impostare una serie di proprietà associate a un buffer dello schermo in modo indipendente. Ciò significa che la modifica del buffer dello schermo attivo può avere un effetto significativo sull'aspetto della finestra della console. Le proprietà associate a un buffer dello schermo includono:

  • Dimensioni del buffer dello schermo, in righe e colonne di tipo carattere.
  • Attributi di testo (colori di primo piano e di sfondo per la visualizzazione di testo che deve essere scritto dalla funzione WriteFile o WriteConsole).
  • Dimensioni e posizione della finestra (area rettangolare del buffer dello schermo della console visualizzata nella finestra della console).
  • Posizione, aspetto e visibilità del cursore.
  • Modalità di output (ENABLE_PROCESedizione StandardD_OUTPUT e ENABLE_WRAP_AT_EOL_OUTPUT). Per altre informazioni sulle modalità di output della console, vedere Modalità della console di alto livello.

Quando viene creato, un buffer dello schermo contiene caratteri di spazio in ogni posizione. Il cursore è visibile e posizionato in corrispondenza dell'origine del buffer (0,0) e la finestra è posizionata con l'angolo superiore sinistro in corrispondenza dell'origine del buffer. Le dimensioni del buffer dello schermo della console, le dimensioni della finestra, gli attributi del testo e l'aspetto del cursore sono determinati dall'utente o dalle impostazioni predefinite del sistema. Per recuperare i valori correnti delle varie proprietà associate al buffer dello schermo della console, usare le funzioni GetConsoleScreenBufferInfo, GetConsoleCursorInfo e GetConsoleMode.

Le applicazioni che modificano le proprietà del buffer dello schermo della console devono creare il proprio buffer dello schermo o salvare lo stato del buffer dello schermo ereditato durante l'avvio e ripristinarlo all'uscita. Questo comportamento cooperativo è necessario per garantire che le modifiche non influiscano sulle altre applicazioni che condividono la stessa sessione della console.

Suggerimento

Da ora in poi, è consigliabile usare la modalità del buffer alternativo, se possibile, anziché creare un secondo buffer dello schermo per questo scopo. La modalità del buffer alternativo offre una maggiore compatibilità tra dispositivi remoti e con altre piattaforme. Per altre informazioni, vedere la discussione sul confronto tra le API della console classica e le sequenze di terminale virtuale.

Aspetto e posizione del cursore

Il cursore di un buffer dello schermo può essere visibile o nascosto. Quando è visibile, l'aspetto può variare, dal riempire completamente una cella di caratteri all'apparire come linea orizzontale nella parte inferiore della cella. Per recuperare informazioni sull'aspetto e sulla visibilità del cursore, usare la funzione GetConsoleCursorInfo. Questa funzione indica se il cursore è visibile e descrive l'aspetto del cursore come percentuale di una cella di caratteri riempita. Per impostare l'aspetto e la visibilità del cursore, usare la funzione SetConsoleCursorInfo.

I caratteri scritti dalle funzioni di I/O della console di alto livello vengono scritti nella posizione corrente del cursore, avanzando il cursore alla posizione successiva. Per determinare la posizione corrente del cursore nel sistema di coordinate di un buffer dello schermo, usare GetConsoleScreenBufferInfo. Per impostare la posizione del cursore e, di conseguenza, controllare il posizionamento del testo scritto o visualizzato dalle funzioni di I/O di alto livello, è possibile usare SetConsoleCursorPosition. Se si sposta il cursore, il testo in corrispondenza della posizione del nuovo cursore verrà sovrascritto.

Nota

L'uso delle funzioni di basso livello per individuare la posizione del cursore è sconsigliato. È consigliabile usare sequenze di terminale virtuale per eseguire una query su questa posizione, se necessario, per i layout avanzati. Altre informazioni sulla preferenza delle sequenze di terminale virtuale sono disponibili nel documento di confronto tra le funzioni classiche e le sequenze di terminale virtuale.

La posizione, l'aspetto e la visibilità del cursore sono impostate in modo indipendente per ogni buffer dello schermo.

Attributi di tipo carattere

Gli attributi di tipo carattere possono essere divisi in due classi: colore e DBCS. Gli attributi seguenti sono definiti nel file di intestazione WinCon.h.

Attributo Significato
FOREGROUND_BLUE Il colore del testo contiene il blu.
FOREGROUND_GRedizione Enterprise N Il colore del testo contiene il verde.
FOREGROUND_RED Il colore del testo contiene il rosso.
FOREGROUND_INTENSITY Il colore del testo è accentuato.
BACKGROUND_BLUE Il colore di sfondo contiene il blu.
BACKGROUND_GRedizione Enterprise N Il colore di sfondo contiene il verde.
BACKGROUND_RED Il colore di sfondo contiene il rosso.
BACKGROUND_INTENSITY Il colore di sfondo è accentuato.
COMMON_LVB_LEADING_BYTE Byte iniziale.
COMMON_LVB_TRAILING_BYTE Byte finale.
COMMON_LVB_GRID_HORIZONTAL Orizzontale superiore.
COMMON_LVB_GRID_LVERTICAL Verticale sinistro.
COMMON_LVB_GRID_RVERTICAL Verticale destro.
COMMON_LVB_REVERedizione Standard_VIDEO Attributi di sfondo e primo piano inversi.
COMMON_LVB_UNDERSCORE Sottolineatura.

Gli attributi di primo piano specificano il colore del testo. Gli attributi di sfondo specificano il colore usato per riempire lo sfondo della cella. Gli altri attributi vengono usati con DBCS (Double Byte Character Set).

Un'applicazione può combinare le costanti di primo piano e di sfondo per ottenere colori diversi. Ad esempio, la combinazione seguente restituisce un testo in colore ciano acceso su uno sfondo blu.

FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_BLUE

Se non viene specificata alcuna costante di sfondo, quest'ultimo sarà nero e se non viene specificata alcuna costante di primo piano, il testo sarà nero. Ad esempio, la combinazione seguente restituisce un testo nero su uno sfondo bianco. Per lo sfondo vengono specificati rosso, verde e blu, che si combina con uno sfondo bianco. Non vengono specificati colori flag per il primo piano in modo che sia nero.

BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED

Ogni cella di caratteri del buffer dello schermo archivia gli attributi di colore per i colori usati per disegnare il primo piano (testo) e lo sfondo di tale cella. Un'applicazione può impostare i dati di colore per ogni cella di caratteri singolarmente, archiviando i dati nel membro Attributes della struttura CHAR_INFO per ogni cella. Gli attributi di testo correnti di ogni buffer dello schermo vengono usati per i caratteri successivamente scritti o visualizzati dalle funzioni di alto livello.

Un'applicazione può usare GetConsoleScreenBufferInfo per determinare gli attributi di testo correnti di un buffer dello schermo e la funzione SetConsoleTextAttribute per impostare gli attributi di tipo carattere. La modifica degli attributi di un buffer dello schermo non influisce sulla visualizzazione dei caratteri scritti in precedenza. Questi attributi di testo non influiscono sui caratteri scritti dalle funzioni di I/O della console di basso livello (ad esempio la funzione WriteConsoleOutput o WriteConsoleOutputCharacter), che specificano in modo esplicito gli attributi per ogni cella scritta o lasciano invariati gli attributi.

Nota

Per modificare gli attributi di testo predefiniti e specifici, è sconsigliato l'uso delle funzioni di basso livello. Per impostare gli attributi di testo, è consigliabile usare sequenze di terminale virtuale. Altre informazioni sulla preferenza delle sequenze di terminale virtuale sono disponibili nel documento di confronto tra le funzioni classiche e le sequenze di terminale virtuale.

Attributi dei tipi di carattere

La funzione GetCurrentConsoleFont recupera le informazioni sul tipo di carattere della console corrente. Le informazioni archiviate nella struttura CONSOLE_FONT_INFO includono la larghezza e l'altezza di ogni carattere nel tipo di carattere.

La funzione GetConsoleFontSize recupera le dimensioni del tipo di carattere usato dal buffer dello schermo della console specificato.

Nota

L'uso delle funzioni per individuare e modificare le informazioni sui tipi di carattere è sconsigliato. Si consiglia di usare le applicazioni da riga di comando in modo neutro, per garantire la compatibilità multipiattaforma e la compatibilità con gli ambienti host che consentono all'utente di personalizzare il tipo di carattere. Per altre informazioni sulle preferenze utente e sugli ambienti host, inclusi i terminali, vedere la roadmap dell'ecosistema.