Partager via


Mémoires tampons d’écran d’une console

Une mémoire tampon d’écran est un tableau à deux dimensions qui comprend des données sur les caractères et les couleurs utilisés pour la sortie de la fenêtre de console. Une console peut avoir plusieurs mémoires tampons d’écran. La mémoire tampon active est celle qui est affichée à l’écran.

Le système crée une mémoire tampon d’écran chaque fois qu’il crée une nouvelle console. Pour ouvrir le handle vers la mémoire tampon d’écran active de la console, spécifiez la valeur CONOUT$ dans un appel à la fonction CreateFile. Un processus peut utiliser la fonction CreateConsoleScreenBuffer afin de créer des mémoires tampons d’écran supplémentaires pour sa console. Une nouvelle mémoire tampon d’écran n’est pas active tant que son handle n’est pas spécifié dans un appel à la fonction SetConsoleActiveScreenBuffer. Toutefois, les mémoires tampons d’écran sont accessibles en lecture et en écriture, qu’elles soient actives ou inactives.

Chaque mémoire tampon d’écran a son propre tableau à deux dimensions contenant des informations sur les caractères. Les données concernant chaque caractère sont stockées dans une structure CHAR_INFO qui spécifie le caractère Unicode ou ANSI, ainsi que les couleurs de premier plan et d’arrière-plan dans lesquelles ce caractère est affiché.

Pour chaque mémoire tampon d’écran, vous pouvez définir indépendamment un certain nombre de propriétés. Cela signifie que le changement de la mémoire tampon d’écran active peut avoir un impact important sur l’apparence de la fenêtre de la console. Les propriétés associées à une mémoire tampon d’écran sont les suivantes :

  • Taille de la mémoire tampon d’écran, en nombre de lignes et de colonnes de caractères.
  • Attributs du texte (couleurs de premier plan et d’arrière-plan pour l’affichage du texte qui doit être écrit par la fonction WriteFile ou WriteConsole).
  • Taille et emplacement de la fenêtre (zone rectangulaire de la mémoire tampon d’écran qui s’affiche dans la fenêtre de la console).
  • Position, apparence et visibilité du curseur.
  • Modes de sortie (ENABLE_PROCESSED_OUTPUT etENABLE_WRAP_AT_EOL_OUTPUT). Pour plus d’informations sur les modes de sortie de la console, consultez Modes de haut niveau de la console.

Lorsque vous créez une mémoire tampon d’écran, celle-ci contient des espaces à chaque position. Son curseur est visible et positionné à l’origine de la mémoire tampon (0,0). La fenêtre est positionnée de sorte que son coin supérieur gauche est situé à l’origine de la mémoire tampon. La taille de la mémoire tampon d’écran de la console, la taille de la fenêtre, les attributs du texte et l’apparence du curseur sont déterminés par l’utilisateur ou par les valeurs par défaut du système. Pour récupérer les valeurs actuelles des différentes propriétés associées à la mémoire tampon d’écran de la console, utilisez les fonctions GetConsoleScreenBufferInfo, GetConsoleCursorInfo et GetConsoleMode.

Les applications qui changent les propriétés de la mémoire tampon d’écran de la console doivent créer leur propre mémoire tampon d’écran, ou enregistrer l’état de la mémoire tampon d’écran héritée lors du démarrage et la restaurer au moment de la fermeture. Ce comportement coopératif est nécessaire pour faire en sorte que les autres applications qui partagent la même session de console ne soient pas impactées par les modifications.

Conseil

Au lieu de créer une deuxième mémoire tampon d’écran à cet effet, nous vous recommandons d’utiliser le mode de mémoire tampon alternatif, si cela vous est possible. Le mode de mémoire tampon alternatif offre une meilleure compatibilité sur les appareils distants et sur les autres plateformes. Pour plus d’informations, consultez Comparaison entre les API de console classiques et les séquences de terminal virtuel.

Apparence et position du curseur

Le curseur d’une mémoire tampon d’écran peut être visible ou masqué. Lorsqu’il est visible, son apparence peut varier, allant du remplissage intégral d’une cellule de caractère à l’affichage d’une ligne horizontale au bas de la cellule. Pour récupérer des informations sur l’apparence et la visibilité du curseur, utilisez la fonction GetConsoleCursorInfo. Cette fonction indique si le curseur est visible et décrit l’apparence de celui-ci en indiquant l’espace qu’il remplit dans une cellule de caractère (en pourcentage). Pour définir l’apparence et la visibilité du curseur, utilisez la fonction SetConsoleCursorInfo.

Les caractères écrits par les fonctions d’E/S de console de haut niveau le sont à l’emplacement actuel du curseur, et font avancer le curseur à l’emplacement suivant. Pour déterminer la position actuelle du curseur dans le système de coordonnées d’une mémoire tampon d’écran, utilisez GetConsoleScreenBufferInfo. Vous pouvez utiliser SetConsoleCursorPosition pour définir la position du curseur et, donc, contrôler le positionnement du texte qui est écrit ou répercuté par les fonctions d’E/S de haut niveau. Si vous déplacez le curseur, le texte situé au nouvel emplacement du curseur sera remplacé.

Remarque

Il est déconseillé d’utiliser les fonctions de bas niveau pour trouver la position du curseur. Nous vous recommandons plutôt d’utiliser les séquences de terminal virtuel pour interroger cette position, si des dispositions avancées le demandent. Pour savoir pourquoi la préférence est donnée aux séquences de terminal virtuel, consultez le document Comparaison entre les API de console classiques et les séquences de terminal virtuel.

La position, l’apparence et la visibilité du curseur sont définies de manière indépendante pour chaque mémoire tampon d’écran.

Attributs de caractères

Les attributs de caractères se divisent en deux classes : Color et DBCS. Les attributs suivants sont définis dans le fichier d’en-tête WinCon.h.

Attribut Signification
FOREGROUND_BLUE La couleur du texte contient du bleu.
FOREGROUND_GREEN La couleur du texte contient du vert.
FOREGROUND_RED La couleur du texte contient du rouge.
FOREGROUND_INTENSITY La couleur du texte est intensifiée.
BACKGROUND_BLUE La couleur d’arrière-plan contient du bleu.
BACKGROUND_GREEN La couleur d’arrière-plan contient du vert.
BACKGROUND_RED La couleur d’arrière-plan contient du rouge.
BACKGROUND_INTENSITY La couleur d’arrière-plan est intensifiée.
COMMON_LVB_LEADING_BYTE Octet de début.
COMMON_LVB_TRAILING_BYTE Octet de fin.
COMMON_LVB_GRID_HORIZONTAL Supérieur horizontal.
COMMON_LVB_GRID_LVERTICAL Gauche vertical.
COMMON_LVB_GRID_RVERTICAL Droite vertical.
COMMON_LVB_REVERSE_VIDEO Inverse les attributs du premier plan et de l’arrière-plan.
COMMON_LVB_UNDERSCORE Caractère de soulignement.

Les attributs du premier plan spécifient la couleur du texte. Les attributs de l’arrière-plan spécifient la couleur qui est utilisée pour remplir l’arrière-plan de la cellule. Les autres attributs sont utilisés avec DBCS.

Une application peut combiner les constantes du premier plan et de l’arrière-plan pour obtenir des couleurs différentes. Par exemple, la combinaison suivante produit un texte cyan clair sur un arrière-plan bleu.

FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_BLUE

Si aucune constante d’arrière-plan n’est spécifiée, l’arrière-plan est noir, et si aucune constante de premier plan n’est spécifiée, le texte est noir. Par exemple, la combinaison suivante produit du texte noir sur un arrière-plan blanc. Les couleurs rouge, vert et bleu sont spécifiées pour l’arrière-plan, ce qui se traduit par un arrière-plan blanc. Aucune couleur d’indicateur n’est spécifiée pour le premier plan. Celui-ci est donc noir.

BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED

Chaque cellule de caractère de la mémoire tampon d’écran stocke les attributs des couleurs qui sont utilisées pour dessiner le premier plan (texte) et l’arrière-plan de cette cellule. Une application peut définir les données de couleur pour chaque cellule de caractère individuellement, en stockant les données dans le membre Attributes de la structure CHAR_INFO pour chaque cellule. Les attributs de texte actuels de chaque mémoire tampon d’écran seront utilisés pour les caractères qui seront écrits ou répercutés par la suite par les fonctions de haut niveau.

Une application peut utiliser GetConsoleScreenBufferInfo pour déterminer les attributs de texte actuels d’une mémoire tampon d’écran, et la fonction SetConsoleTextAttribute pour définir les attributs de caractères. La modification des attributs d’une mémoire tampon d’écran n’affecte pas l’affichage des caractères précédemment écrits. Ces attributs de texte n’affectent pas les caractères écrits par les fonctions d’E/S de console de bas niveau (comme la fonction WriteConsoleOutput ou WriteConsoleOutputCharacter), qui spécifient explicitement les attributs de chaque cellule écrite ou qui laissent les attributs inchangés.

Remarque

Il est déconseillé d’utiliser des fonctions de bas niveau pour manipuler des attributs de texte par défaut ou spécifiés. Nous vous recommandons plutôt d’utiliser les séquences de terminal virtuel pour définir des attributs de texte. Pour savoir pourquoi la préférence est donnée aux séquences de terminal virtuel, consultez le document Comparaison entre les API de console classiques et les séquences de terminal virtuel.

Attributs de police

La fonction GetCurrentConsoleFont récupère des informations sur la police actuelle de la console. Les informations stockées dans la structure CONSOLE_FONT_INFO comprennent la largeur et la hauteur de chaque caractère dans la police en question.

La fonction GetConsoleFontSize récupère la taille de la police utilisée par la mémoire tampon d’écran de console spécifiée.

Remarque

Il est déconseillé d’utiliser des fonctions pour rechercher et manipuler des informations de police. Nous vous recommandons plutôt d’utiliser des applications en ligne de commande sans police pour garantir la compatibilité entre les plateformes, ainsi que la compatibilité avec les environnements hôtes qui permettent à l’utilisateur de personnaliser la police. Pour plus d’informations sur les préférences utilisateur et les environnements hôtes, y compris les terminaux, consultez la Feuille de route de l’écosystème.