C++ und Grafik in Konsole?



  • Habe da eine Frage; das habe ich noch nie in C gesehen bzw. darüber gelesen...
    Ich kenne aus FreeBASIC, dass mit Grafikbefehlen (ohne WinAPI, bzw. indirekt) mit Screen+Zahl für Auflösung etc. ein schwarzes, etwas grösseres Fenster geöffnet wird und dann mit LINE usw. Grafiken gezeichnet werden können (WIn32-Anwendungen) wie QB für DOS das macht. Geht sowas unter C auch, hat es hier auch die Funktionen?

    Danke 🙂



  • unter borland c++ mit <graphics.h>

    oder als Fenster (Winapi,xlib/sdl) mit opengl...

    =>http://www.c-plusplus.net/forum/viewtopic-var-t-is-182975.html
    =>FAQ



  • P.S.: Linien, Kreise,Rechtecke und so gibt es natürlich...



  • Ah super, danke!



  • Hi, ja, das geht auch ohne API-Aufrufen (solange es sich lediglich nur auf Linien, Ecken und diversen anderen Zeichen beschränkt, um verschiedene Farben zu erzeugen sind wiederrum API-Funktionen nötig).

    IBM hat im Jahre 1981 die Codepage 437 entwickelt, die dem ASCII Zeichensatz weitere 128 Zeichen hinzufügt, sodass nun ein voller Byte ausgenutzt wird. Darunter befinden sich auch die besagten Grafikelemente, wie z.B. Ecken, Linien, Doppellinien, Pfeile etc. Diese Zeichen können auf der Konsole dargestellt werden.

    Die Tabelle auf Wikipedia bietet dir schonmal eine gute Referenz, zusätzlich kannst du dir meinen ASCII-Reporter runterladen, der zeigt dir die gesamte Codepage incl. dazugehörigen ASCII-Wert an. Die entsprechenden Codes musst du dann nurnoch mit static_cast casten, um dessen Zeichen anzuzeigen. Du kannst z.B. folgende Konstanten definieren:

    typedef unsigned char const UCHARC;
    
    UCHARC LEFT_UPPER_CORNER    = 218;
    UCHARC LEFT_LOWER_CORNER    = 192;
    UCHARC RIGHT_UPPER_CORNER   = 191;
    UCHARC RIGHT_LOWER_CORNER   = 217;
    UCHARC HORIZONTAL_LINE      = 196;
    UCHARC VERTICAL_LINE        = 179;
    UCHARC SMALL_DOT            = 219;
    UCHARC SMALL_QUADR_DOT      = 254;
    UCHARC SMALL_ROUND_DOT      = 4;
    

    Um's anzeigen zu lassen:

    std::cout<<static_cast <UCHARC> (SMALL_QUADR_DOT);
    //Zeichnet nen kleinen Punkt
    


  • Ah ja die Zeichen welche unter DOS oft verwendet werden. Wie mache ich die farbig? 🙂



  • Das geht nicht mit den Standardmitteln...

    Benutzt du win, schau im win32-konsolenforum nach der ic:

    ic.c-plusplus.net

    unter linux vll. ncurses?



  • Um Zeichen einzufärben, musst du unter Windows auf die API zurückgreifen. Paar Beispielfunktionen:

    typedef unsigned char const UCHARC;
    namespace colors
    {
    	UCHARC black          = 0x00;
    	UCHARC blue           = 0x01;
    	UCHARC green          = 0x02;
    	UCHARC cyan           = 0x03;
    	UCHARC red            = 0x04;
    	UCHARC magenta        = 0x05;
    	UCHARC brown          = 0x06;
    	UCHARC lightgray      = 0x07;
    	UCHARC darkgray       = 0x08;
    	UCHARC lightblue      = 0x09;
    	UCHARC lightgreen     = 0x0A;
    	UCHARC lightcyan      = 0x0B;
    	UCHARC lightred       = 0x0C;
    	UCHARC lightmagenta   = 0x0D;
    	UCHARC yellow         = 0x0E;
    	UCHARC white          = 0x0F;
    }
    
    // Färbt den Texthintergrund
    void textbackgrnd (UCHARC color)
    {
        if (white < color )
        {
            return;
        }
        GetCSBI ();
        SetConsoleTextAttribute (ConsoleBuffer, ((CSBI.wAttributes & 0xFF0F ) | (color << 4)));
    }
    
    //Färbt den Text
    void textcolor (UCHARC color)
    {
        if (white < color)
        {
            return;
        }
        GetCSBI ();
        SetConsoleTextAttribute (ConsoleBuffer, (CSBI.wAttributes & 0xFFF0 ) | color);
    }
    

    Anwendung müsste klar sein. Einmal ne Funktion aufgerufen, und der Text ist für immer farbig, solange er nicht auf Standard zurückgesetzt wurde.



  • Danke! Ja, ich vewende Windows


Anmelden zum Antworten