Comment changer la couleur de la console en C++
- Utiliser les codes d’échappement ANSI pour changer la couleur de la console
-
Utilisez la méthode
SetConsoleTextAttribute()
pour changer la couleur de la console en C++
![Comment changer la couleur de la console en C++](/img/Cpp/feature-image---How-to-colorize-output-in-console-Cpp.webp)
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
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