Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Aktuelle Farbe einlesen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
30.03.2006, 18:09 Uhr
~Black Hell
Gast


Hi ich habe ein Problem...

weiß jemand wie ich die aktuelle Textfarbe einlesen kann um sie dann später mit


C++:
SetConsoleTextAttribute(HANDLE, WORD)


wieder einzustellen.

Mit


C++:
GetConsoleScreenBufferInfo()


soll es gehn, aber ich weiß nicht wie
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
30.03.2006, 19:45 Uhr
~Black Hell
Gast


hat den keiner ne Ahnung
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
30.03.2006, 20:48 Uhr
xXx
Devil


guck doch mal hier: http://groups.google.de/groups?q=Get+Console+default+text+color&hl=de&lr=&sa=N&tab=gg&oi=groupst&q=Get+Console+default+text+color
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
30.03.2006, 21:23 Uhr
Spacelord
Hoffnungsloser Fall



C++:
CONSOLE_SCREEN_BUFFER_INFO csbi;
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hOut,&csbi);


In csbi.wAttributes sind dann die Farbinformationen zu finden.
Die einzelnen Farben die verwendet werden musst du dann über Bitprüfungen gegen die Konstanten :
FOREGROUND_BLUE ...FOREGROUND_GREEN...BACKGROUND_RED ,
BACKGROUND_INTENSITY etc.
austesten.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
30.03.2006, 22:43 Uhr
~Black Hell
Gast


Ahhhhh so weit wa ich auch schon mit dem HANDLE und dem Screen buffer

das csbi.wAttributes fehlte mir^^

also kann ich das so lösen:


C++:
CONSOLE_SCREEN_BUFFER_INFO csbi;
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);



GetConsoleScreenBufferInfo(hOut,&csbi);

cout << "Farbe Grau\n";

SetConsoleTextAttribute(hOut, 12);

cout << "Farbe Rot\n";

SetConsoleTextAttribute(hOut, csbi.wAttributes); // Einfach so einfügen!?!

cout << "Farbe wieder Grau\n";



Was meinst du mit Bitprüfungen?
Und noch eine dumme Frage...ist das so üblich de nbuffer als csbi zu deklarieren? Oder ist des egal?

Danke auf jedenfall für die Antworten...habe schon verzweifelt danach gesucht, auch bei google
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
31.03.2006, 00:06 Uhr
Spacelord
Hoffnungsloser Fall



C++:
WORD oldColor = csbi.wAttributes;
//imho besser weil selbsterklärend
SetConsoleTextAttribute(hOut, FOREGROUND_RED|FOREGROUND_INTENSITY);
cout << "Farbe Rot\n";
SetConsoleTextAttribute(hOut, oldColor);


Hi,du könntest zwar csbi.wAttributes direkt als Parameter übergeben,aber wenn es nicht unbedingt auf optimale Speicherverwendung ankommt würde ich dazu tendieren die alten Farbwerte sofort in ner seperaten Variable zu speichern.
Zumindest für mich hat es nen etwas bitteren Beigeschmack mit einer nicht mehr aktuellen Status Struktur ,wie z.B. CONSOLE_SCREEN_BUFFER_INFO,bei der ich persönlich implizit davon ausgehe dass es sich um den aktuellen "Snapshot" handelt,im weiteren Verlauf noch weiterzuarbeiten.Zumindest würde ich der Variablen der Struktur dann nen aussagekräftigeren Name geben wie z.B. old_csbi oder so,der deutlich macht dass es sich nicht um den aktuellen Zustand handelt.
Genauso wie der Parameter von SetConsoleTextAttribut.Anstatt da ne 12 hinzuschreiben solltest du dir die Mühe machen die entsprechenden Konstanten zu benutzen.
Zum einen bist du damit sicher gegen etwaige Änderungen der Werte hinter den Konstanten und zum anderen wird der Code dadurch einfach besser lesbar.
Das mag zwar alles in nem 10zeiligen Programm keine Rolle spielen,aber wenn du nen umfangreiches Projekt nach nem Jahr oder 2 mal wieder anschaust wirst du froh sein wenn du auf solche Kleinigkeiten geachtet hast.


Zitat von ~Black Hell:

Und noch eine dumme Frage...ist das so üblich de nbuffer als csbi zu deklarieren? Oder ist des egal?


Also speziell für diese Struktur ist diese Abkürzung sehr gängig.Natürlich könntest du die Variable auch "OmasSockenStopfNadel" oder "Telefonmann" nennen aber......siehe oben

Das mit den Bitprüfungen kannst du vergessen.Da hatte ich nur nicht richtig gelesen und dachte du würdest dich dafür interessieren welche Farbe die Konsole aktuell hat...

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.

Dieser Post wurde am 31.03.2006 um 00:10 Uhr von Spacelord editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
31.03.2006, 01:27 Uhr
~Black Hell
Gast


Ja das stimmt schon...wollte auch erst alles in ner extra variable packen, bloß da ich das auch in einer Funktion nutze die ich in ner header reinstopfe, lass ich das, weil die Funktion dann selbsterklärend ist.

und man weiß nie was für ein projekt man vorhat wo genau diese Funktion auftaucht und es auf jeden bit ankommt :P

bei gelegenheit (bestimmt morgen ^^) werde ich das trotzdem ändern.

und wegen dem Parameter:

naja mir gehts auch darum das schnell schreiben zu können...ich könnte vielleicht ne enum Aufzählung machen, aber dann müsste ich auch den Bg noch veränderbar machen können....

Mensch du hast mich zum denken gebracht^^
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
31.03.2006, 07:08 Uhr
Spacelord
Hoffnungsloser Fall



Zitat von ~Black Hell:

und wegen dem Parameter:

naja mir gehts auch darum das schnell schreiben zu können...ich könnte vielleicht ne enum Aufzählung machen, aber dann müsste ich auch den Bg noch veränderbar machen können....



Da brauchst du kein enum zu benutzen die Konstanten gibt es ja schon.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/console_screen_buffer_info_str.asp

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: