# printf mit Farbe (C -Console @ win32)



## MCIglo (24. Oktober 2004)

Hi,

ich sitze hier gerade an einem Programm, und würde bestimmte Dinge gerne Hervorheben.
Habe dazu auch hier im Forum etwas gefunden, was auf die Win-API setzt, jedoch war das für C++ und auch nachdem ich das 'cout' durch 'printf' ersetzt hab, brachte mir der compiler (VC++ Toolkit 2003) jede Menge Errors.
Auch 'printf("\033[0;47;1;36m")' ging nicht, obwohl das unter Linux funktionieren soll.

Kann es vielleicht auch sein, dass das garnicht geht? In meinen Büchern zu C konnte ich nämlich hierzu auch nichts finden 

Danke


----------



## napstix (26. Oktober 2004)

Hallo MCIglo,
ich habe letztens ein ähnliches Problem gehabt (zwar bei einer reinen DOS-Anwendung, aber das ist ja eventuell mit der Konsole vergleichbar). In einem Proggi wollte ich verschiedene Text, und Hintergrundfarben auf dem Bildschirm haben. Das ging weder mit cout noch mit printf. Nach stundenlangen Versuchen und einiger Recherche bin ich drauf gekommen: es geht mit cprintf (in VC++ ist es _cprintf), weil cprintf direkt in den Bildschirmspeicher schreibt, im Gegensatz zu cout und printf.
Die Farben willst Du ja mit ESC-Sequenzen angeben. Das war mir schon immer zu "kryptisch". Ich  in Borland C++5.0. Dort gibt es für einfache Ausgaben im Textmodus die nachfolgende Möglichkeit:

include <conio.h>

textbackground(GREEN);
textcolor(WHITE);
cprintf("abcdefg ");

conio.h muss includiert sein, wenn symbolische Namen für Farben, wenn dezimale Angabe geht es denke ich ohne conio, aber: 

"Das Leben ist kurz, Speicher ist billig und symbolisch ist schön übersichtlich." {  Deswegen bin ich kein Freund von ESC-Sequenzen geworden    }

In MS VC++ habe ich aber kein textbackground und kein textcolor gefunden, möglich dass es andere Befehle dafür gibt. Vielleicht funktioniert es aber auch mit Deinen - ESC's im Zusammenhang mit _cprintf.

Beste Grüße
napstix


----------



## Googy (29. Oktober 2004)

Hi!

Versuch  mal damit:

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED ); //rot

gruss googy


----------



## xCondoRx (29. Oktober 2004)

napstix hat gesagt.:
			
		

> In MS VC++ habe ich aber kein textbackground und kein textcolor gefunden


Dafür gibt es eine leicht abgewandelte conio.h namens conioex.h..
Damit gilt die Gleiche Syntax wie bei der conio.h..
Einfach mal googeln..


----------



## Tobias K. (29. Oktober 2004)

moin


Ich frag mich warum die Frage so oft gestellt wird, wenn es doch schon sooo viele Antworten gibt!

Beispiele:
http://www.tutorials.de/forum/showthread.php?t=174254&highlight=farbe
http://www.tutorials.de/forum/showthread.php?t=144151&highlight=farbe
http://www.tutorials.de/forum/showthread.php?t=156033&highlight=farbe
http://www.tutorials.de/forum/showthread.php?t=11046&highlight=farbe (das beste!)


Sucht doch mal!


mfg
umbrasaxum


----------



## MCIglo (29. Oktober 2004)

umbrasaxum hat gesagt.:
			
		

> moin
> 
> 
> Ich frag mich warum die Frage so oft gestellt wird, wenn es doch schon sooo viele Antworten gibt!
> ...



Hättest du meinen Text gelesen, wüsstest du, wieso ich gefragt habe!
1. link: zum Einen is das C++ und zum Andren sind das die Unix-Escape-Sequenzen, die wie ich oben gescheiben habe, unter Windoof nicht funktionieren
2. link: C++
3. link: C++
4. link: C++ und genau auf diesen link berufe ich mich in meinem Posting


----------



## Tobias K. (29. Oktober 2004)

moin


OK, dann muss ich mich erstmal für meine Vorschnelle Antwort entschuldigen.

Die Escapesequenzen sollten auch unter Windows funktionieren wenn du die ansii Sachen beim starten von windows mit initialisieren. Weiss aber nicht genau ob das noch geht da ich das das letzte mal unter Win98 gemacht.

textbackground(GREEN); und textcolor(WHITE); gehen meines wissens nur in nem Turbo C Compiler.

Habe allerdings dein Problem noch ncht genau verstanden.
Wenn ich hier drin: http://www.tutorials.de/showthread....highlight=farbe
std::cout durch printf ersetze bekomm ich keine Fehlermeldungen.


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

int _tmain(int argc, _TCHAR* argv[])
{
	

HANDLE hStdOut;
CONSOLE_SCREEN_BUFFER_INFO csbiScreen;
WORD wOldColAttr;

// HANDLE für stdout (Anm.: Error-Checking wäre hier angebracht)
hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

// Alte Textfarbe abspeichern
GetConsoleScreenBufferInfo(hStdOut, &csbiScreen);
wOldColAttr = csbiScreen.wAttributes;

// Text-Farbe auf blau & "leuchtend" setzen
SetConsoleTextAttribute(hStdOut, FOREGROUND_BLUE | FOREGROUND_INTENSITY);

// Hier kann nun per WinAPI (WriteFile(), ReadFile(), WriteConsole(), ReadConsole())
// oder per "Standard"-Methoden gearbeitet werden.
printf("Blau ist keine Farbe sondern ein Zustand!");

// Alte Text-Farbe wiederherstellen
SetConsoleTextAttribute(hStdOut, wOldColAttr);

Sleep(3000);
return 0;
```


Ansonsten poste doch mal deinen Code dann kann ich dir besser helfen.


mfg
umbrasaxum


----------



## MCIglo (30. Oktober 2004)

xCondoRx hat gesagt.:
			
		

> Dafür gibt es eine leicht abgewandelte conio.h namens conioex.h..
> Damit gilt die Gleiche Syntax wie bei der conio.h..
> Einfach mal googeln..



Google liefert mir genau 5 Treffer, wobei nur einer auch nen download enthält. Leider war das aber ein Link aus einem Forum, der nicht mehr geht.
Hast du diesen Header nicht noch irgendwo?

//edit: hab doch noch eine gefunden.

//edit2:
Und es Funktioniert und is so einfach, wie ich es mir gewünscht habe, super!

hier nochmal der link: CONIOEX.H


----------

