Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Non-Officiels > Programmation > C > Des couleurs dans la console (Windows) > Lecture du tutoriel

Des couleurs dans la console (Windows)

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)
Avatar
Auteur : guimers8
Note : 17 / 20 (22 votes)
Visualisations : 32 822

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 !
Sommaire du tutoriel :
Icône du chapitre

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 :

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.

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 !) :

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 :
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 ! :colere2:
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 :p (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 ! :)
Retour en haut Retour en haut


Créé : le 26/03/2006 à 18:37:30
Modifié : le 22/08/2008 à 16:06:11
Avancement : 100%
Licence : Copie non autorisée

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 167 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.0535s (0.043s)