Colorare il testo nella console con C ++
Domanda
Come posso scrivere il testo colorato alla console con C ++? Cioè, come posso scrivere il testo diverso con colori diversi?
Soluzione
Aggiungere un po 'di colore al tuo testo Console
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
// you can loop k higher to see more color choices
for(int k = 1; k < 255; k++)
{
// pick the colorattribute k you want
SetConsoleTextAttribute(hConsole, k);
cout << k << " I want to be nice today!" << endl;
}
attributi del carattere Ecco come essere interpretato il valore "k".
Altri suggerimenti
standard C ++ non ha alcuna nozione di 'colori'. Allora, cosa ti stai chiedendo dipende dal sistema operativo.
Per Windows, è possibile controllare il SetConsoleTextAttribute di funzione.
Si * nix, è necessario utilizzare il ANSI sequenze di escape.
ANSI codici colore di fuga:
Name BG FG
Black 30 40
Red 31 41
Green 32 42
Yellow 33 43
Blue 34 44
Magenta 35 45
Cyan 36 46
White 37 47
Bright Black 90 100
Bright Red 91 101
Bright Green 92 102
Bright Yellow 93 103
Bright Blue 94 104
Bright Magenta 95 105
Bright Cyan 96 106
Bright White 97 107
Codice di esempio per C / C ++:
#include <iostream>
#include <string>
int main(int argc, char ** argv){
printf("\n");
printf("\x1B[31mTexting\033[0m\t\t");
printf("\x1B[32mTexting\033[0m\t\t");
printf("\x1B[33mTexting\033[0m\t\t");
printf("\x1B[34mTexting\033[0m\t\t");
printf("\x1B[35mTexting\033[0m\n");
printf("\x1B[36mTexting\033[0m\t\t");
printf("\x1B[36mTexting\033[0m\t\t");
printf("\x1B[36mTexting\033[0m\t\t");
printf("\x1B[37mTexting\033[0m\t\t");
printf("\x1B[93mTexting\033[0m\n");
printf("\033[3;42;30mTexting\033[0m\t\t");
printf("\033[3;43;30mTexting\033[0m\t\t");
printf("\033[3;44;30mTexting\033[0m\t\t");
printf("\033[3;104;30mTexting\033[0m\t\t");
printf("\033[3;100;30mTexting\033[0m\n");
printf("\033[3;47;35mTexting\033[0m\t\t");
printf("\033[2;47;35mTexting\033[0m\t\t");
printf("\033[1;47;35mTexting\033[0m\t\t");
printf("\t\t");
printf("\n");
return 0;
}
GCC:
g++ cpp_interactive_terminal.cpp -o cpp_interactive_terminal.cgi
chmod +x cpp_interactive_terminal.cgi
./cpp_interactive_terminal.cgi
È possibile scrivere i metodi e chiamare come questo
HANDLE hConsole;
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
int col=12;
// color your text in Windows console mode
// colors are 0=black 1=blue 2=green and so on to 15=white
// colorattribute = foreground + background * 16
// to get red text on yellow use 4 + 14*16 = 228
// light red on yellow would be 12 + 14*16 = 236
FlushConsoleInputBuffer(hConsole);
SetConsoleTextAttribute(hConsole, col);
cout << "Color Text";
SetConsoleTextAttribute(hConsole, 15); //set back to black background and white text
Supponendo che si sta parlando di una finestra della console di Windows, cercare le funzioni della console nella documentazione di MSDN Library.
In caso contrario, o più in generale, dipende dalla console. I colori non sono supportati dalla libreria C ++. Ma una libreria per la gestione della console può / sosterrà i colori. Per esempio. Google "ncurses colori".
Per terminali seriali collegati e emulatori di terminale è possibile controllare le cose emettendo "sequenze di escape". Questi di solito iniziano con ASCII 27 (il carattere di escape in ASCII). V'è uno standard ANSI e un sacco di schemi personalizzati.
Non sono sicuro di quello che si vuole veramente fare, ma la mia ipotesi è che si desidera che il programma di C ++ per il testo colorato di uscita della console, giusto? Non so su Windows, ma su tutti i sistemi Unix (incluso Mac OS X), si sarebbe sufficiente utilizzare ANSI fuga sequenze per questo.
In Windows, è possibile utilizzare qualsiasi combinazione di verde rosso e blu in primo piano (testo) e lo sfondo.
/* you can use these constants
FOREGROUND_BLUE
FOREGROUND_GREEN
FOREGROUND_RED
FOREGROUND_INTENSITY
BACKGROUND_BLUE
BACKGROUND_GREEN
BACKGROUND_RED
BACKGROUND_INTENSITY
*/
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
std::cout << "I'm cyan! Who are you?" << std::endl;
In Windows 10 è possibile utilizzare sequenze di escape in questo modo:
#ifdef _WIN32
SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), ENABLE_VIRTUAL_TERMINAL_PROCESSING);
#endif
// print in red and restore colors default
std::cout << "\033[32m" << "Error!" << "\033[0m" << std::endl;
Il modo più semplice che si può fare è:
#include <stdlib.h>
system("Color F3");
Dove "F" è il codice per il colore di sfondo e 3 è il codice per il colore del testo.
Mess intorno con esso per vedere altre combinazioni di colore:
system("Color 1A");
cout << "Hello, what is your name?" << endl;
system("Color 3B");
cout << "Hello, what is your name?" << endl;
sytem("Color 4c");
cout << "Hello, what is your name?" << endl;
Non utilizzare "sistema (" Colore ... ")" se non si desidera che l'intero schermo per essere riempito con il colore. Questo è lo script necessario per rendere il testo colorato:
#include <iostream>
#include <windows.h>
int main()
{
const WORD colors[] =
{
0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F,
0xA1, 0xB2, 0xC3, 0xD4, 0xE5, 0xF6
};
HANDLE hstdin = GetStdHandle(STD_INPUT_HANDLE);
HANDLE hstdout = GetStdHandle(STD_OUTPUT_HANDLE);
WORD index = 0;
SetConsoleTextAttribute(hstdout, colors[index]);
std::cout << "Hello world" << std::endl;
FlushConsoleInputBuffer(hstdin);
return 0;
}
cplusplus esempio è un esempio come utilizzare i colori nella consolle.