Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Préparons le terrain
Contrairement à ce qu'indique le titre de cette partie, vous n'allez pas apprendre à créer
un super jeu de courses de rallye en 3D mais apprendre à insérer du texte en couleurs dans la console Windows. C'est sympa, quand même !
Pour commencer, créez un nouveau projet avec votre IDE préféré, vous devriez obtenir le
code minimal.
Code : C1
2
3
4
5
6
7
8 | #include <stdio.h> // Les includes
#include <stdlib.h>
int main(int argc, char *argv[]) // La fonction "main"
{
return 0;
}
|
Ce qu'il faut faire est
très simple : ajoutez cette ligne après les
directives de préprocesseur :
Code : C
Cette ligne inclue la librairie
windows.h, je ne pense donc pas avoir besoin de vous expliquer pourquoi ça ne tourne pas sur les autres OS...
Fonction et prototype
La fonction s'appelle
Color, et vous savez pourquoi ? C'est parce que j'ai choisi ce nom !! Tout bêtement.

Maintenant qu'on a inclus
windows.h, voici le prototype de la fonction
Color :
Code : C1 | void Color(int couleurDuTexte,int couleurDeFond);
|
Elle prend deux paramètres :
- couleurDuTexte : c'est la couleur du texte
- couleurDeFond : c'est la couleur d'arrière-plan du texte.
Ces deux variables sont à remplacer par des valeurs allant de 0 à 15 (0 à 15 en hexadécimal) : chaque nombre représente une couleur bien particulière.
Le code de la fonction est :
Code : C1
2
3
4
5 | void Color(int couleurDuTexte,int couleurDeFond) // fonction d'affichage de couleurs
{
HANDLE H = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(H,couleurDeFond*16+couleurDuTexte);
}
|
Il faut copier ce code dans votre projet !
Voilà comment ça marche. On déclare une variable de type
HANDLE, dans laquelle on récupère le Handle (c'est ce qui caractérise une fenêtre sous Windows) de la fenêtre actuelle.
On passe
STD_OUTPUT_HANDLE à la fonction
GetStdHandle pour dire qu'on parle bien de la sortie (affichage).
Ensuite, la fonction
SetConsoleTextAttribute. On lui passe le Handle qu'on vient de récupérer, et la couleur que l'on souhaite mettre. Ici, j'utilise la formule
(couleurDeFond * 16) + couleurDuTexte.
C'est tout !
Quelles couleurs ?
Maintenant qu'on a vu la fonction, son prototype et son fonctionnement, il faut qu'on sache quelles valeurs mettre comme paramètres de la fonction (et par conséquent aux variables
couleurDuTexte et
couleurDeFond qui sont dans la formule).
Il faut donc mettre un chiffre allant de 0 à 15, voici la liste des couleurs et la valeur correspondante.
- 0 : Noir
- 1 : Bleu foncé
- 2 : Vert foncé
- 3 : Turquoise
- 4 : Rouge foncé
- 5 : Violet
- 6 : Vert caca d'oie
- 7 : Gris clair
- 8 : Gris foncé
- 9 : Bleu fluo
- 10 : Vert fluo
- 11 : Turquoise
- 12 : Rouge fluo
- 13 : Violet 2
- 14 : Jaune
- 15 : Blanc
Ces nombres sont en fait des raccourcis. Microsoft décrit dans sa documentation les constantes suivantes à combiner avec une barre oblique (on enlève alors la formule !) :
- FOREGROUND_BLUE : Text color contains blue.
- FOREGROUND_GREEN : Text color contains green.
- FOREGROUND_RED : Text color contains red.
- FOREGROUND_INTENSITY : Text color is intensified.
- BACKGROUND_BLUE : Background color contains blue.
- BACKGROUND_GREEN : Background color contains green.
- BACKGROUND_RED : Background color contains red.
- BACKGROUND_INTENSITY : Background color is intensified.
Exemple des deux utilisations :
Avec la formule
Code : C 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | #include <stdio.h> // Les includes
#include <stdlib.h>
#include <windows.h>
void Color(int couleurDuTexte,int couleurDeFond);
int main(int argc, char *argv[]) // La fonction "main"
{
Color(12,3);
printf("Cette phrase est ecrite en rouge sur fond turquoisen");
Color(14,13);
printf("Et celle-ci, en jaune sur fond violet !");
return 0;
}
void Color(int couleurDuTexte,int couleurDeFond) // fonction d'affichage de couleurs
{
HANDLE H=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(H,couleurDeFond*16+couleurDuTexte);
}
|
On passe donc à la fonction les couleurs souhaitées, pour le texte et l'arrière-plan.
Avec les constantes
Code : C 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | #include <stdio.h> // Les includes
#include <stdlib.h>
#include <windows.h>
void Color(WORD Attributes);
int main(int argc, char *argv[]) // La fonction "main"
{
Color(FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_BLUE);
printf("Bijour tout le monde !");
return 0;
}
void Color(WORD Attributes) // fonction d'affichage de couleurs
{
HANDLE H=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(H,Attributes);
}
|
Ici, on modifie un peu le code de la fonction, pour avoir un paramètre pour mettre les
flags. Si vous optez pour cette solution, je vous invite à consulter MSDN :
http://msdn.microsoft.com/library/en-u [...] sp?frame=true
Si vous testez ce code, je dois vous avouer que c'est très moche ! Mais après, c'est votre problème..
Voilà un petit screen de ce que vous pouvez faire :
Vous pouvez écrire "GAGNE !!!!" en vert, ou "vous avez perdu..." en rouge, signe de désespoir...
Laissez libre cours à votre imagination, mais n'en abusez pas !
Vous pouvez également faire
presque la même chose avec la fonction
system();, et sans rien inclure.

Le problème est que cette fonction colore l'ensemble de la console: tout ce qui sera écrit, mais aussi tout ce qui était écrit !
Code : C1
2
3
4
5 | system ("color 19");
system ("color 4E"); // on met les deux valeurs collées :
system ("color 0F"); // des chiffres et des lettres.
system ("color AC"); // comme avant, le premier chiffre est la couleur du texte, la deuxième la couleur du fond !
system ("color A3");
|
Évidemment, c'est beaucoup plus simple, et pas besoin d'inclure
windows.h ;mais bon, je préfère ma fonction
Color à la fonction
system() : vous faites comme vous voulez, hein

!
Faites selon vos besoins !
Les valeurs sont les mêmes que pour
Color(), et pour les lettres, c'est de l'hexadécimal

(A=10 ; B=11 ; C=12 ; etc.).
A vous de choisir !