Aller au menu - Aller au contenu

Des couleurs dans la console (Windows)


Informations sur le tutoriel

Avatar
Auteur : guimers8
Visualisations : 44 788


Plus d'informations Plus d'informations
Bonjour tout le monde ! :D

Je vais ici vous apprendre comment mettre de la couleur dans la console de Windows en C. Je ne suis pas fana de Windows (Vive Mac ! ^^ ), bien au contraire ! Mais bon... ça peut toujours être sympa lorsque vous montrerez votre "Plus ou moins" à vos amis Windoziens !

Beaucoup diront que la console n'est pas faite pour être belle, et qu'il faut carrément faire un programme utilisant une GUI : je ne dis pas le contraire et je vous y encourage ! ^^

Pour les Linuxiens et MacUsers, allez voir là ! C'est le tuto de Tab(ulation).

Alors, are you ready ? GO !

Oh !... Que c'est beau !!

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 : C
1
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
1
#include <windows.h>

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. :lol:
Maintenant qu'on a inclus windows.h, voici le prototype de la fonction Color :
Code : C
1
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 : C
1
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/en-us/library/ms686047.aspx

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 :
Image utilisateur

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 ! ^^

Une alternative...

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 : C
1
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 :p !
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 ! :)

Voilà : vous savez donc maintenant comment mettre de la couleur dans la console de Windows. Pas besoin de QCM, vous n'avez rien appris de nouveau ! ^^

Ne vous limitez pas à la console, juste parce que vous savez faire ça ! Sur ce, amusez-vous bien ! :)

Informations sur le tutoriel

Retour en haut Retour en haut

Créé : Le 26/03/2006 à 18:37:30
Modifié : Le 20/03/2009 à 23:45:50
Avancement : 100%
Licence : Copie non autorisée

60 commentaires