Couleurs en C

Résolu/Fermé
Strat - 25 oct. 2014 à 12:55
 Strat - 25 oct. 2014 à 14:38
Bonjour,

Existe-il un moyen d'afficher du texte en couleur MAIS de manière à ce que le code marche à la fois sous Linux et Windows ?

Merci d'avance

2 réponses

ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
25 oct. 2014 à 14:06
'lut, non, pas directement, c'est-à-dire pas sans bibliothèque externe (
ncurses
par ex) ou sans utiliser de
#define
s.
Là où sous UNIX/Max OS/Linux il faut juste sortir un caractère d'échappement (
\033
) puis un code de format derrière, sous Windows, bah comme tout sur cet OS, tu te tapes 7 lignes de WinAPI pour arriver à tes fins.
Voici un exemple sous Windows:
#include <stdio.h>
#include <windows.h>

int main() {
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_SCREEN_BUFFER_INFO consoleInfo;
    WORD saved_attributes;
    GetConsoleScreenBufferInfo(hConsole, &consoleInfo);
    saved_attributes = consoleInfo.wAttributes;
    SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE);
    printf("Je suis en bleu\n");
    SetConsoleTextAttribute(hConsole, saved_attributes);
    return 0;
}
Et un sous UNIX/Mac OS/Linux:
#include <stdio.h>

int main() {
    printf("\033[34mJe suis en bleu\n\033[0m");
    return 0;
}
Après donc tu peux utiliser des
#define
a gogo
#ifdef _WIN32
  #define BLUE FOREGROUND_BLUE
  #define InitTextColor() HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); \
    CONSOLE_SCREEN_BUFFER_INFO consoleInfo; \
    WORD saved_attributes; \
    GetConsoleScreenBufferInfo(hConsole, &consoleInfo); \
    saved_attributes = consoleInfo.wAttributes; \
    SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE); 
  #define TextColor(x) SetConsoleTextAttribute(hConsole, x);
  #define ResetTextColor() SetConsoleTextAttribute(hConsole, saved_attributes);
#else
  #define InitTextColor()
  #define BLUE 34
  #define TextColor(x) printf("\033[ ## x ## m");
  #define ResetTextColor() printf("\033[0m");
#endif

#include <stdio.h>
int main() {
    InitTextColor();
    TextColor(BLUE);
    printf("Je suis en bleu\n");
    ResetTextColor();
    return 0;
}
Pas testé hein, mais tu comprends l'idée ;)
0
Merci, j'utilisais ta méthode sous Linux mais une fois arrivée sous Windows cela ne marche plus, je pense que je vais utiliser virtual box, cela sera plus simple. L'important est que mon programme marche sous Linux.
0