2011-10-15 12 views
5

me gustaría escribir algo similar aColorear salida stdout a Windows cmd.exe desde la consola C++ aplicación

cout << "this text is not colorized\n"; 
setForeground(Color::Red); 
cout << "this text shows as red\n"; 
setForeground(Color::Blue); 
cout << "this text shows as blue\n"; 

para un programa en C++ consola se ejecuta en Windows 7. He leído que & mundial de primer plano de fondo puede ser cambiado desde la configuración de cmd.exe, o llamando al sistema() - pero ¿hay alguna manera de cambiar las cosas a nivel de personaje que pueden codificarse en un programa? Al principio pensé "secuencias de ANSI", pero parecen estar perdidas en el ámbito de Windows.

+0

Use SetConsoleTextAttribute(). –

Respuesta

9

Puede utilizar la función SetConsoleTextAttribute:

BOOL WINAPI SetConsoleTextAttribute(
    __in HANDLE hConsoleOutput, 
    __in WORD wAttributes 
); 

He aquí un breve ejemplo que se puede echar un vistazo.

#include "stdafx.h" 
#include <iostream> 
#include <windows.h> 
#include <winnt.h> 
#include <stdio.h> 
using namespace std; 

int main(int argc, char* argv[]) 
{ 
    HANDLE consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE); 
    cout << "this text is not colorized\n"; 
    SetConsoleTextAttribute(consolehwnd, FOREGROUND_RED); 
    cout << "this text shows as red\n"; 
    SetConsoleTextAttribute(consolehwnd, FOREGROUND_BLUE); 
    cout << "this text shows as blue\n"; 
} 

Esta función afecta al texto escrito después de la llamada a la función. Entonces, finalmente, es probable que desee restaurar el color/atributos original. Puede usar GetConsoleScreenBufferInfo para registrar el color inicial desde el principio y realizar un reinicio w/SetConsoleTextAttribute al final.

+0

Gracias - lo aceptaré si lo consigo para trabajar – tucuxi

+0

Funciona como un encanto. No sabía que era tan fácil. – tucuxi

Cuestiones relacionadas