Archiv verlassen und diese Seite im Standarddesign anzeigen : [C/C++] Konsolengestaltung
Hi Leute,
kann mir jemand ne gute Lib nennen für "Konsolengestaltung"? Also ich weiß nicht wie man das genau nennt, also ich meine damit das man damit halt die Textfarbe ändern kann und die Konsole aufteilen kann, oder sone Pseudobuttons machen usw. ungefäir so wie beim mc.
mfg
Simeon
RapidMax
20-08-2005, 14:56
ncurses?
Gruss, Andy
LSSuper2004
20-08-2005, 16:37
Für Farben und so kannst du dir die Escape-Sequenzen zunutze machen, die kannst du mit der Sequenz \e ausgeben (wie \n für newline.) Gib mal info screen ein, unter Virtual Terminal => Control Sequences findest du, was das Terminal unterstützt. Ein Beispiel, um die Vordergrundfarbe auf weiß und den Hintergrund auf rot zu setzen (das wird erst wirksam, wenn du danach neue zeichen an den Output schreibst):
\e[0;37;41m
Am Ende des Programms (also kurz vor return 0;) soltest du noch mit der Sequenz
\e[0;39;49m
die Farben resetten, sonst wundert sich der User über eine farbige Konsole.
Weiteres nützliches (was man gut gbrauchen kann):
\e[0G\e[0d um den Cursor an die erste Stelle zu schieben
\e[2J um den ganzen Bildschirm zu löschen (auch gut, um die ganze Konsole auf gewünschte Farbe zu setzen). Will man dann ganz oben weitermachen, schreibt man dahinter noch die erste Sequenz.
Noch ein paar Hinweise: Ich glaube, bei Umleitungen der Ausgabe in eine Datei könnte es sein, dass der Output mit den Escape-Sequenzen verdreckt ist. Das sieht man aber nur, wenn man das File in z.B. KWrite öffnet, im vi (also auf der Kommandozeile) werden die Zeichen glaube ich schon ausgewertet und du hast einen farbenfrohen Editor.
Also Zusammenfassung: info screen =>Virtual Terminal => Control Sequences findest du die Liste. das Escape Zeichen bekommst du in C(++) mit \e (glub ich)
peschmae
20-08-2005, 21:35
ncurses?
oder (lib)slang was einige gegenüber ncurses zu bevorzugen scheinen. Ich weiss aber nicht wieso :)
MfG Peschmä
Also ncurses gefallen mir ganz gut, nur hab ich ein Problem, unzwar will ich in dem einen Window was schreiben und das soll dann nach dem ich Enter gedrückt habe in dem anderen erscheinen. Das klapt soweit auch ganz gut, doch wenn ich nocht was eingebe und Enter drücke, überschreibt er das alte. Das ist einerseits ja logisch, weil ich das schreiben mit mvwprintw(my_win1,1,1,msg); ja auf die Koordinaten 1,1 lege. Ich könnte jetzt also n Counter laufen lassen, der immer eine Zeile weiter runter geht, doch was mache ich dann wenn ich unten angekommen bin? Dann soll er ja anfangen das Neuste immer ganz unten hinzuschreiben und alles andere wird dann ja um eine Zeile nach oben verschoben. So meine frage dazu, gibt es einen einfachen weg das zu realisieren, vll irgend son Befehlt wie PrintAndScroll *g* oder muss ich mir da ne eigene Lösung aus ner Mänge mvwprintw's bauen?
Wie wäre es mit einem Scrolling und danach dann in die freigewordene untere Zeile schreiben?
Aber wie mache ich es wenn ich mit den Esc's nicht den ganzen Bildschirm der Konsole, sondern nur ein einziges (Virtuelles)Fenster in der Konsole verändern will?
Weil mit ncurses selber kann ich die Schrift nur verändern wenn ich auch den Hintergrund verändere, aber der soll ja so bleiben wie er ist.
Aber wie mache ich es wenn ich mit den Esc's nicht den ganzen Bildschirm der Konsole, sondern nur ein einziges (Virtuelles)Fenster in der Konsole verändern will?scroll oder wscrl. Vorher musst du noch scrollok(Fenster, 1) aufrufen.Mit ESCs geht das soeinfach nicht.
Versuch mal, bei den defintionen der Farbpaarer als Hintergrundfarbe "0" statt COLOR_BLACK einzustellen, evtl. ist das dann transparent, sonst probiere "-1"
scroll oder wscrl. Vorher musst du noch scrollok(Fenster, 1) aufrufen.Mit ESCs geht das soeinfach nicht.
Versuch mal, bei den defintionen der Farbpaarer als Hintergrundfarbe "0" statt COLOR_BLACK einzustellen, evtl. ist das dann transparent, sonst probiere "-1"
Also das scrollen hatte ich ja schon gelöst, trotzdem danke.
Das mit der Hintergrundfarbe geht nicht, 0 ist schwarz, und bei -1 geht irgendwie garnix, dann is Schrift und Bg schwarz. Aber das der komplette Bg schwarz wird, passiert ja schon sobald ich start_color(); benutze, desshalb denke ich nicht das ich mein Problem mi diesen Color Pairs lösen kann.
EDIT:
Habs gelöst, danke das mit der -1 war doch ganz richtig, nur musste vorher noch was erledigt werden. Das gewünschte Ergebnis liefert:
start_color();
use_default_colors();
init_pair(1, COLOR_RED, -1);
wbkgdset(my_win,COLOR_PAIR(1));
wclear(my_win);
wrefresh(my_win);
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.