PDA

Visualizza la versione completa : colori in C


virgo1984
30-01-2005, 12:36
salve a tutti

io programmando in c sotto linux per cambiare i colori utilizzavo i comandi printf("\e[32m casa ") e scrive casa in verde.

purtroppo questi comandi non hanno effetto sotto windows perciò la mia domanda è:

esistono dei corrispondenti per windows??

Johnny_Depp
30-01-2005, 13:39
sì, ma non sono standard (dipende dall'ambiente C/C++ che stai utilizzando): http://forum.html.it/forum/search.php?s=&action=showresults&searchid=119584&sortby=&sortorder=

altrimenti ci sono le API di <windows.h>

netarrow
30-01-2005, 14:55
Originariamente inviato da Johnny_Depp
...
altrimenti ci sono le API di <windows.h>

Ecco un esempio:



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

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

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

system("PAUSE");


}


:ciauz:

netarrow
30-01-2005, 15:26
oltre che interi puoi passare definizioni come queste:


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 mescolarle con l'operatore | :


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

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

void main() {
selector(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_RED);
printf("%s", "Ciao");

}


:ciauz:

Ponza
30-01-2005, 15:44
ma se uso ad esmpio un selector(5); mi stampa ogni carattere del programma di violetto...non si può limitare la colorazione a una printf sola? tipo solo al titolo....

netarrow
30-01-2005, 15:46
che io sappia no(queste cose le ho apprese in occasione del post sto anch' io sperimentando da poco meno di 1 ora).
Dopo che hai scritto nel titolo con selector(5) risistemi con selector(7) e riscriverà in bianco.

:ciauz:

Loading