2012-02-13 31 views
9

C'è un modo per inviare testo colorato alla console? Sto utilizzando Visual Studio 2010 e ho solo bisogno del codice per funzionare in Windows.Uscita console colore con C++ in Windows

Non sono riuscito a trovare nulla tranne il comando Windows COLOR, ma questo ha cambiato il colore per l'intero schermo e sto cercando qualcosa che cambierà solo la parte che desidero stampare. ho visto fare in Managed C++

esempio

{color red} 
cout << "Hello "; 
{color blue} 
cout << "world\n"; 

sarebbe cedere "Ciao mondo" in rosso e blu.

+3

possibile duplicato del [Cambia colore cout text C++] (http://stackoverflow.com/questions/8087414/change-color-of-cout-text-c) o [Colorizza output stdout su cmd.exe di Windows dall'app C++ della console] (http: // stackoverflow .com/domande/7778392/colorare-stdout-uscita-per-windows-cm d-exe-from-console-c-app) o [Colori C++ nella console] (http://stackoverflow.com/questions/4053837/c-colors-in-console-different-colors-in-different-text) oppure ... –

risposta

23

ho preso questo codice da here:

// 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 
// a Dev-C++ tested console application by vegaseat 07nov2004 

#include <iostream> 
#include <windows.h> // WinApi header 

using namespace std; // std::cout, std::cin 

int main() 
{ 
HANDLE hConsole; 
int k; 

hConsole = GetStdHandle(STD_OUTPUT_HANDLE); 

// you can loop k higher to see more color choices 
for(k = 1; k < 255; k++) 
{ 
// pick the colorattribute k you want 
SetConsoleTextAttribute(hConsole, k); 
cout << k << " I want to be nice today!" << endl; 
} 

cin.get(); // wait 
return 0; 
} 
+0

Sì, l'ho appena scoperto. Sono venuto qui per chiudere la mia domanda. Grazie comunque! – Rakosman

+0

Ho dovuto aspettare un po 'prima che potessi: P – Rakosman

-3

È possibile utilizzare il comando di sistema (""), che viene utilizzato come quella:

cout<<"lol"; 
system("color 1") // the colours are from 1 to 15. 
cout<<"Coloured text! yay"; 
+1

Yay per qualsiasi cosa * nix! – alexmherrmann

+0

Questa non è solo una soluzione stupida, ma anche la risposta è sbagliata: ** color ** * [fb] *: imposta i colori in primo piano * f * e background * g *. [da microsoft.com] (http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/ntcmds.mspx?mfr=true) –

+1

anche i colori sono in formato esadecimale, 0 -f. Se inserisci 15, imposterai sia i colori di primo piano che di sfondo! –

2
uscita

Coloring C++ in Windows viene effettuata mediante SetConsoleTextAttribute, in cui la MANIGLIA della console è passata insieme agli attributi. Tuttavia, chiamare SetConsoleTextAttribute è ingombrante. Fortunatamente ci sono molte piccole librerie su internet e github che possono aiutarti, dovresti sceglierne una con un'API che ti piace. Se si desidera cambiare i colori con l'operatore < <, si consiglia questa libreria solo intestazioni https://github.com/ikalnitsky/termcolor. L'API è simile a questa:

using namespace termcolor; 
std::cout << grey << "grey message" << reset << std::endl; 
std::cout << red  << "red message"  << reset << std::endl; 

Se si deve ripristinare il colore si spegne, provare la mia libreria. È solo per intestazione, solo per Windows, e consente di colorare facilmente le istruzioni printf: https://github.com/jrebacz/colorwin. L'API è simile al seguente:

using namepsace wincolor; 
std::cout << color(gray) << "grey message\n"; 
std::cout << color(red) << "red message\n"; 

std::cout << "normal color\n"; 
{ 
    withcolor scoped(red); 
    std::cout << "|red\n"; 
    std::cout << "|red again\n"; 
} 
std::cout << "normal color\n"; 
withcolor(cyan).printf("A cyan printf of %d\n", 1234); 
0

Qui è la nostra in soluzione casa:

inline void setcolor(int textcol, int backcol) 
{ 
    if ((textcol % 16) == (backcol % 16))textcol++; 
    textcol %= 16; backcol %= 16; 
    unsigned short wAttributes = ((unsigned)backcol << 4) | (unsigned)textcol; 
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); 
    CONSOLE_SCREEN_BUFFER_INFO csbi; 
    SetConsoleTextAttribute(hStdOut, wAttributes); 
} 

e qui ci sono esempi di colori tra cui scegliere:

#define LOG_COLOR_WHITE 7 
#define COLOR_GREEN 10 
#define COLOR_YELLOW 14 
#define COLOR_MAGENTA 13