Nello standar ANSI non c'è alcuna funzione per gestire i colori, ogni compilatore ha le
sue funzioni(vedi gcc, borland, turbo C++ ecc...) per non parlare di Visual C++ col
quale siamo obbligati ad utilizzare le api.

Il vantaggio delle api è che funzioneranno su qualsiasi compilatore, però
funzioneranno solo su win naturalmente, se abbiamo linux(e apro una parentesi) i
colori si gestiscono con le ncurses o con formattazioni in printf tipo

printf("e[32m casa ");

Ma siamo qui per usre le api win32, la spina dorsale per colorare il testo è
SetConsoleTextAttribute:

HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hCon,int_value_colore);

Per astrarre questa operazione creiamo una funzione più generica:

void SetColor(unsigned short color) {
HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hCon,color);
}

Quindi, ad esempio, se noi utilizzassimo

SetColor(5);

Tutti i comandi di output diretti dalla e alla nostra console saranno in viola.
Con 12 rosso, con 9 grigio, con 0 nero e con 7 bianco... e gli altri si scoprono
provando.
Però le caratteristiche non si fermano qui, ecco un elenco di #define tratti dal MSDN:

FOREGROUND_BLUE Text color contains blue.
FOREGROUND_GREEN Text color contains green.
FOREGROUND_RED Text color contains red.
FOREGROUND_INTENSITY Text color is intensified.
BACKGROUND_BLUE Background color contains blue.
BACKGROUND_GREEN Background color contains green.
BACKGROUND_RED Background color contains red.
BACKGROUND_INTENSITY Background color is intensified.
COMMON_LVB_LEADING_BYTE Leading byte.
COMMON_LVB_TRAILING_BYTE Trailing byte.
COMMON_LVB_GRID_HORIZONTAL Top horizontal.
COMMON_LVB_GRID_LVERTICAL Left vertical.
COMMON_LVB_GRID_RVERTICAL Right vertical.
COMMON_LVB_REVERSE_VIDEO Reverse foreground and background attributes.
COMMON_LVB_UNDERSCORE Underscore.

E' possibile mescolarli con l'operatore |, ecco un esempio:

selector(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_RED);
printf("%s", "Ciao");
-----------------------------

Dopo questa introduzione ecco il tip, come esempio c'è un programma cha stampa "Verde" "Bianco" e "Rosso" su sfondo blue e poi ripristina

#include <windows.h>
#include <stdio.h>

void selector(unsigned short color)
{
HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hCon,color);
}

void main() {
    selector(2 | BACKGROUND_BLUE);
    printf("%s ", "Verde");
    selector(7 | BACKGROUND_BLUE);
    printf("%s ", "Bianco");
    selector(12 | BACKGROUND_BLUE);
    printf("%s", "Rosso");

    selector(7);//ripristina in bianco
    printf("n");//vai a capo dopo il ripristino sennò la riga ha sfondo blue
    //fino in fondo

    system("PAUSE");    
}