Couleurs et placement.

Des couleurs dans la console, ainsi qu'une fonction permettant de placer le curseur à un endroit choisi.

SetConsoleTextAttribute,SetConsoleCursorPosition,SetConsoleTitle

Voir version :

Pas de dépendances

Télécharger :

#include <windows.h>
#include <tchar.h>
#include <stdio.h>

void Color(int flags)
{
    HANDLE H=GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(H,(WORD)flags);
}

void Locate(int x,int y)
{
    HANDLE H=GetStdHandle(STD_OUTPUT_HANDLE);
    COORD C;
    C.X=(SHORT)x;
    C.Y=(SHORT)y;
    SetConsoleCursorPosition(H,C);
}

int main()
{
    SetConsoleTitle(_T("Plouf"));
    Color(FOREGROUND_BLUE|FOREGROUND_INTENSITY);
    printf("Test\n");
    Locate(35,6);
    Color(FOREGROUND_RED|FOREGROUND_INTENSITY|BACKGROUND_GREEN);
    printf("ReTest\n");
    return 0;
}



Commentaires

  Voici comment faire des couleurs et déplacer le curseut texte console, sans conio, sous Windows.

  Regardez le main simplement :

  Regardez la fonction SetConsoleTitle : je lui passe simplement le titre que je veux.
  Je vous laisse regarder le chapitre 4.1.1 pour une explication sur le _T dans la partie TCHAR.

  Je définis la couleur en passant des flags qu'on verra ci dessous.
    
  Vous pouvez constatez en lançant le programme que le "test" est écrit en bleu.
  Puis le Retest est écrit en rouge sur fond vert.

  Regardez ma fonction Locate : je définis une position x et y : et le curseur se met a cet endroit.

  Tres simple a utiliser.

  Maintenant, regardons les fonctions du dessus :

  Color :
  *******

  Je récupere dans un HANDLE, l'identifiant de la console de sortie (la ou je vois le texte s'écire (STD_OUTPUT_HANDLE)
  Un HANDLE, c'est une "carte d'identité windows", j'en aurai besoin pour la fonction qui suit :

  SetConsoleTextAttribute : je définis dans quelle console je veux changer la couleur du texte :
  pour cela, je lui passe la HANDLE que je viens de récupérer, pour dire que c'est cette console la que je veux modifier, ainsi que les flags.

  Voici la liste des flags existant :

  #define FOREGROUND_BLUE      0x0001 // text color contains blue.
  #define FOREGROUND_GREEN     0x0002 // text color contains green.
  #define FOREGROUND_RED       0x0004 // text color contains red.
  #define FOREGROUND_INTENSITY 0x0008 // text color is intensified.
  #define BACKGROUND_BLUE      0x0010 // background color contains blue.
  #define BACKGROUND_GREEN     0x0020 // background color contains green.
  #define BACKGROUND_RED       0x0040 // background color contains red.
  #define BACKGROUND_INTENSITY 0x0080 // background color is intensified.

  En combinant ces valeurs avec des |, vous obtenez ce que vous voulez.
  
  On peut décomposer cela en deux groupes : les foreground (la couleur du texte), et les background (la couleur du fond du texte)
  Dedans, 4 sous valeurs : blue, vert, rouge, intensity.

  Si vous n'en mettez aucune, vous avez du noir. 
  Rouge,vert,bleu seuls pour avoir ces couleurs
  intensity pour que ce soit plus lumineux. (ainsi, vous aurez un vert plus clair avec intensity que sans)

  Ensuite, les combinaisons des couleurs sont les suivantes :
  bleu + vert = turquoise
  rouge + vert = jaune
  rouge + bleu = violet.
  bleu + rouge + vert = blanc.

  Notez que intensity seul donne un gris un peu plus foncé que bleu + rouge + vert sans intensité.  

  Locate :
  ********

  Pareil, je récupere le HANDLE de la console, puis je crée une structure COORD (structure de Windows) ou je remplis mon x et y.
  SetConsoleTextAttribute s'occupe du reste.

  Note : ce sont des fonctions Windows.h, le résultat n'est PAS PORTABLE sous un autre systeme que Windows.


  Note 2 : cet exemple ne montre qu'une ou deux fonctions de Windows.h pour les consoles. Il en existe plein d'autres
  Voici ou se renseigner :

	http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/console_functions.asp