Probleme bei Fensterhintergrund mittels NCurses
-
Hey @all,
Ich hoffe das mir mit diesen Problem jemand helfen kann.
Also angenommen ich habe folgendes Fenster+----------------------------------------+ | | | | | | | | | | | | +----------------------------------------+
OK, soweit so gut, ich kann auch mit wbkgd bzw. wbkgdset die Hintergrundfarbe setzen.
Angenommen die Hintergrundfarbe ist blau und die Vordergrundfarbe ist gelb.
So sind die Farben nur dort vorhanden, wo auch irgendwelche Symbole, ASCII-Codes, oder sonstiges ist. Der Rest vom Fenster, also der Hintergrund ist aber nicht blau sondern schwarz.
Ich schätze das dies meine Standard-Konsolen-Farbe ist. Nur wie bekomme ich es hin, damit auch dieser Hintergrund blau ist?Kann mir da bitte jemand helfen?
Und die 2. Frage: Normalerweise ist wenn ich wbox(WINDOW*, 0, 0,) automatisch ein Rahmen um das ganze Fenster (mit einfachen linien) wie kann ich es bewerkstelligen, das diese doppelt sind (also ein doppel-Rahmen wie unter MS-Dos)
Bitte um Hilfe, ich habe leider in den Foren und unter Google diesbezüglich nichts gefunden
Bin für jeden der mir helfen kann herzlich DankbarMfG Roman1311
-
Hallo Roman1311!
Ich schätze mal du hast vorher die Farbpaare initialisiert mit:
if (has_colors()) { start_color(); init_pair(1, COLOR_YELLOW, COLOR_BLUE); }
Wenn du dann ein Fenster mit beispielsweise:
newwin(win, 20, 20, 10, 10); box(win, 0, 0); wbkgd(win, COLOR_PAIR(1) | A_BOLD); /* A_BOLD für extra hell */
erstellst, must du
wrefresh(win)
aufrufen, damit alles auf dem Bildschrirm sichtbar wird.
Die Sache mit dem Doppelrahmen liegt glaube ich daran, dass diese Sonderzeichen nicht auf allen Terminals standardmäßig vorhanden sind. Linux Consolen emulieren meistens VT100. Bin mir dieser Sache aber nicht ganz sicher. Ich versuche mal mehr darüber herauszufinden.
Auf meiner Seite habe ich einige Programme, die ebenfalls ncurses verwenden, veröffentlicht:http://people.freenet.de/resurrection/kiebitz.htmGruß
Michael
-
void box(WINDOW *win, chtype vert, chtype hor)
zeichnet Rahmen um Fenster mit Zeichen vert und hor.Wird hier 0 angegeben, werden | und - verwendet.
-
-
wie wärs mit ein paar symbole für deinen windowsrahmen...
#include <ncurses.h> int main() { initscr(); printw("Upper left corner "); addch(ACS_ULCORNER); printw("\n"); printw("Lower left corner "); addch(ACS_LLCORNER); printw("\n"); printw("Lower right corner "); addch(ACS_LRCORNER); printw("\n"); printw("Tee pointing right "); addch(ACS_LTEE); printw("\n"); printw("Tee pointing left "); addch(ACS_RTEE); printw("\n"); printw("Tee pointing up "); addch(ACS_BTEE); printw("\n"); printw("Tee pointing down "); addch(ACS_TTEE); printw("\n"); printw("Horizontal line "); addch(ACS_HLINE); printw("\n"); printw("Vertical line "); addch(ACS_VLINE); printw("\n"); printw("Large Plus or cross over "); addch(ACS_PLUS); printw("\n"); printw("Scan Line 1 "); addch(ACS_S1); printw("\n"); printw("Scan Line 3 "); addch(ACS_S3); printw("\n"); printw("Scan Line 7 "); addch(ACS_S7); printw("\n"); printw("Scan Line 9 "); addch(ACS_S9); printw("\n"); printw("Diamond "); addch(ACS_DIAMOND); printw("\n"); printw("Checker board (stipple) "); addch(ACS_CKBOARD); printw("\n"); printw("Degree Symbol "); addch(ACS_DEGREE); printw("\n"); printw("Plus/Minus Symbol "); addch(ACS_PLMINUS); printw("\n"); printw("Bullet "); addch(ACS_BULLET); printw("\n"); printw("Arrow Pointing Left "); addch(ACS_LARROW); printw("\n"); printw("Arrow Pointing Right "); addch(ACS_RARROW); printw("\n"); printw("Arrow Pointing Down "); addch(ACS_DARROW); printw("\n"); printw("Arrow Pointing Up "); addch(ACS_UARROW); printw("\n"); printw("Board of squares "); addch(ACS_BOARD); printw("\n"); printw("Lantern Symbol "); addch(ACS_LANTERN); printw("\n"); printw("Solid Square Block "); addch(ACS_BLOCK); printw("\n"); printw("Less/Equal sign "); addch(ACS_LEQUAL); printw("\n"); printw("Greater/Equal sign "); addch(ACS_GEQUAL); printw("\n"); printw("Pi "); addch(ACS_PI); printw("\n"); printw("Not equal "); addch(ACS_NEQUAL); printw("\n"); printw("UK pound sign "); addch(ACS_STERLING); printw("\n"); refresh(); getch(); endwin(); return 0; }
-
ich weiß nicht, ich glaube es versteht mich niemand, es geht darum einen Doppelrahemn zu erzeugen, so wie es halt under MS-Dos geht. die Symbole habe ich mir schon angesehen, jedoch gibt es da nirgends Doppel-Rahmen. Mir würde es darum gehen, das wenn ein Fenster nicht den Focus besitzt, dieses mit einer Linie, und bei aktivem Focus mit 2 Linien angezeigt wird.
MfG Roman1311
P.S.: Und ich weiß auch das es mit box einen Rahmen erzeugt, hatt eich ja vor ein paar Posts geschrieben, jedoch nur EINFACH.
und die Symbole sind mirauch bekannt (stehen ja in /usr/include/ncurses.h)
-
Hallo Roman1311!
Habe mich über die Zeichen für den Doppelrahmen kundig gemacht. Folgender Funktionsaufruf erzeugt einen Doppelrahmen:
wborder(my_win, 4194490, 4194490, 4194509, 4194509, 4194505, 4194491, 4194504, 4194492);
Wenn du in deinem Programm häufiger mit diesen Zeichen hantierst, sind entsprechende selbst definierte Symbole von Vorteil:
#define DFRAME_ULC 4194505 /* -- Doppelrahmen obere linke Ecke -- */ #define DFRAME_URC 4194491 /* -- Doppelrahmen obere rechte Ecke -- */ /* usw. */
Gruß
Michael