Comment changer la couleur de la console en C++

Jinku Hu 11 décembre 2023
  1. Utiliser les codes d’échappement ANSI pour changer la couleur de la console
  2. Utilisez la méthode SetConsoleTextAttribute() pour changer la couleur de la console en C++
Comment changer la couleur de la console en C++

Cet article explique plusieurs méthodes pour changer la couleur de la console en C++.

Utiliser les codes d’échappement ANSI pour changer la couleur de la console

Comme les couleurs ne font pas partie de la bibliothèque C++ standard et que les fonctions spécifiques à la console sont principalement gérées par les systèmes d’exploitation, il n’existe pas de fonction en langage natif pour ajouter des couleurs aux flux de sortie. Cependant, nous discutons de certaines méthodes spécifiques à la plate-forme pour gérer la colorisation des textes.

Les codes d’échappement ANSI sont un moyen relativement portable de résoudre ce problème. Les codes d’échappement sont des séquences d’octets commençant le plus souvent par un caractère d’échappement ASCII et un caractère de parenthèse suivis de paramètres. Ces caractères sont intégrés dans le texte de sortie, et la console interprète les séquences comme des commandes plutôt que du texte à afficher. Les codes ANSI comprennent plusieurs formats de couleurs, dont les détails complets peuvent être consultés sur cette page. Dans l’exemple de code suivant, nous démontrons la définition de plusieurs caractères de couleur comme des macros et nous incluons ensuite ces symboles dans les arguments de la chaîne printf. Remarquez que printf concatène plusieurs chaînes de caractères à double apostrophe passées à la première place du paramètre.

#include <iostream>

#define NC "\e[0m"
#define RED "\e[0;31m"
#define GRN "\e[0;32m"
#define CYN "\e[0;36m"
#define REDB "\e[41m"

using std::cout;
using std::endl;

int main(int argc, char *argv[]) {
  if (argc < 2) {
    printf(RED "ERROR" NC
               ": provide argument as follows -> ./program argument\n");
    exit(EXIT_FAILURE);
  }
  printf(GRN "SUCCESS!\n");

  return EXIT_SUCCESS;
}

Sortie (sans argument de programme):

ERROR: provide argument as follows -> ./program argument

Sortie (avec argument de programme):

SUCCESS!

Alternativement, les mêmes codes d’échappement peuvent être utilisés avec un appel cout. Notez qu’il n’est pas nécessaire d’utiliser plusieurs fois l’opérateur d’insertion de flux << et de combiner simplement les symboles macro en conjonction avec les chaînes littérales car ils seront automatiquement combinés.

#include <iostream>

#define NC "\e[0m"
#define RED "\e[0;31m"
#define GRN "\e[0;32m"
#define CYN "\e[0;36m"
#define REDB "\e[41m"

using std::cout;
using std::endl;

int main() {
  cout << CYN "Some cyan colored text" << endl;
  cout << REDB "Add red background" NC << endl;
  cout << "reset to default colors with NC" << endl;

  return EXIT_SUCCESS;
}

Production:

Some cyan colored text
Add red background
reset to default with NC

Utilisez la méthode SetConsoleTextAttribute() pour changer la couleur de la console en C++

L’attribut SetConsoleTextAttribute est la méthode de l’API Windows pour définir les couleurs du texte de sortie en utilisant différents paramètres. Cette fonction définit les attributs des caractères écrits dans la mémoire tampon de l’écran de la console par les fonctions WriteFile ou WriteConsole. La description complète des attributs des caractères peut être consultée sur cette page.

#include << windows.h>>

#include <iostream>
#include <string>

using std::cout;
using std::endl;

int main() {
  std::string str("HeLLO tHERe\n");
  DWORD bytesWritten = 0;

  HANDLE cout_handle = GetStdHandle(STD_OUTPUT_HANDLE);
  SetConsoleTextAttribute(console_handle,
                          FOREGROUND_RED | BACKGROUND_INTENSITY);
  WriteFile(cout_handle, str.c_str(), str.size(), &bytesWritten, NULL);

  return EXIT_SUCCESS;
}

Production:

Some red colored text
Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Article connexe - C++ IO