2012-02-13 397 views
9

¿Hay alguna forma de enviar texto en color a la consola? Estoy usando Visual Studio 2010, y solo necesito el código para trabajar en Windows.Salida de consola de color con C++ en Windows

No he podido encontrar nada excepto el comando de Windows COLOR, pero eso cambió el color de toda la pantalla, y estoy buscando algo que cambie solo la parte que deseo imprimir. que he visto hacer en C++ administrada

por ejemplo,

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

produciría "Hola mundo" en rojo y azul.

+3

posible duplicado de [Cambiar el color de cout text C++] (http://stackoverflow.com/questions/8087414/change-color-of-cout-text-c) or [Colorize stdout output to Windows cmd.exe from console C++ app] (http: // stackoverflow .com/questions/7778392/colorize-stdout-output-to-windows-cm d-exe-from-console-c-app) o [Colores C++ en la consola] (http://stackoverflow.com/questions/4053837/c-colors-in-console-different-colors-in-different-text) o ... –

Respuesta

23

Tomé este código de 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í, acabo de encontrar eso. Vine aquí para cerrar mi pregunta. ¡Gracias! – Rakosman

+0

Tuve que esperar un poco antes de poder: P – Rakosman

-3

Usted puede utilizar el sistema ("") de comandos, que se utiliza como esa:

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

Yay for anything * nix! – alexmherrmann

+0

Esta no es solo una solución estúpida, pero la respuesta también es incorrecta: ** color ** * [fb] *: establece los colores de primer plano * f * y de fondo * g *. [desde microsoft.com] (http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/ntcmds.mspx?mfr=true) –

+1

también los colores están en formato hexadecimal, 0 -F. Si ingresas 15, establecerás los colores de fondo y de fondo. –

2
salida

colorear C++ en Windows se realiza a través SetConsoleTextAttribute, donde el HANDLE de la consola pasó junto con los atributos. Sin embargo, llamar a SetConsoleTextAttribute es engorroso. Afortunadamente, hay muchas bibliotecas pequeñas en Internet y github que pueden ayudar, solo debes elegir una con una API que te guste. Si desea cambiar los colores con el operador < <, recomiendo esta biblioteca de solo cabecera https://github.com/ikalnitsky/termcolor. La API se ve así:

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

Si tener que restablecer el color te desconecta, prueba con mi biblioteca. También es solo encabezado, solo Windows, y le permite colorear declaraciones de impresión fácilmente: https://github.com/jrebacz/colorwin. El API es el siguiente:

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

Aquí es nuestra en la solución de la 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); 
} 

y aquí son ejemplos de colores para elegir:

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