2013-06-15 14 views
10

So un po 'come fare i colori nella console C++ Win32. Ma non è davvero efficiente. Ad esempio:C++ Win32 Console Colore

SYSTEM("color 01") 

Rallenta molto sul processo. Inoltre:

HANDLE h = GetStdHandle (STD_OUTPUT_HANDLE); 
WORD wOldColorAttrs; 
CONSOLE_SCREEN_BUFFER_INFO csbiInfo; 

/* 
    * First save the current color information 
    */ 

GetConsoleScreenBufferInfo(h, &csbiInfo); 
wOldColorAttrs = csbiInfo.wAttributes; 

/* 
    * Set the new color information 
    */ 

SetConsoleTextAttribute (h, FOREGROUND_RED); 

Funziona alla grande, ma non ha molti colori. Inoltre, FOREGROUND_RED è rosso scuro.

Quindi, quello che voglio chiedere, non è un set come la proprietà CLR Console::ForegroundColor impostato, quindi è possibile utilizzare qualsiasi colore dall'enum ConsoleColor?

+2

Hai provato l'impostazione della L'indicatore 'FOREGROUND_INTENSITY' per renderlo rosso vivo? Ad esempio: 'SetConsoleTextAttribute (h, FOREGROUND_RED | FOREGROUND_INTENSITY)' –

+0

Funziona, ma mi chiedo ancora se ci sia un modo per ottenere più colori, magari con la tavolozza? –

+0

La console supporta solo 16 colori, che vengono creati combinando FOREGROUND_RED, FOREGROUND_BLUE, FOREGROUND_GREEN e FOREGROUND_INTENSITY. – riv

risposta

20

La console supporta solo 16 colori, che vengono creati combinando i quattro valori come segue (avrei potuto ottenuto il grigio/grigio scuro confuso, ma si ottiene l'idea):

namespace ConsoleForeground 
{ 
    enum { 
    BLACK    = 0, 
    DARKBLUE   = FOREGROUND_BLUE, 
    DARKGREEN   = FOREGROUND_GREEN, 
    DARKCYAN   = FOREGROUND_GREEN | FOREGROUND_BLUE, 
    DARKRED   = FOREGROUND_RED, 
    DARKMAGENTA  = FOREGROUND_RED | FOREGROUND_BLUE, 
    DARKYELLOW  = FOREGROUND_RED | FOREGROUND_GREEN, 
    DARKGRAY   = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, 
    GRAY    = FOREGROUND_INTENSITY, 
    BLUE    = FOREGROUND_INTENSITY | FOREGROUND_BLUE, 
    GREEN    = FOREGROUND_INTENSITY | FOREGROUND_GREEN, 
    CYAN    = FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE, 
    RED    = FOREGROUND_INTENSITY | FOREGROUND_RED, 
    MAGENTA   = FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE, 
    YELLOW   = FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN, 
    WHITE    = FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, 
    }; 
} 
+0

Grazie, è molto utile, grazie per tutte le risposte. –

+0

È possibile rimuovere tutti i compiti e continuerà a funzionare perché i codici colore sono in ordine crescente. – fereh

2

La console ha solo un numero limitato di colori. L'implementazione .NET utilizza ConsoleColor per impostare colori che sono solo un'enumerazione di 16 colori.

La sottostante console Win32 ha 8 colori di base che vengono raddoppiati tramite l'uso del flag di intensità (come menzionato nel commento di Shaktal sotto la domanda).

Problemi correlati