Farben verändern mit C++ im cmd Fenster



  • Vielleicht hast du ein falsches Projekt angefangen.
    Win32-Consolen Projekt brauchst du.

    Obwohl das eig. nicht sein kann.
    Du hast irgendwas mit den Pfaden und Dateien falsch gemacht.
    Hast du CoreAPI.h/.cpp geändert ?



  • #include <windows.h>
    
    #include <iostream>
    
    using namespace std;
    
    void ClearScreen(WORD attribute = 7)
    {
        CONSOLE_SCREEN_BUFFER_INFO csbi;
        COORD target = {0, 0};
        DWORD written;
    
        GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
        FillConsoleOutputCharacter(GetStdHandle(STD_OUTPUT_HANDLE), ' ',
                                                csbi.dwSize.X * csbi.dwSize.Y,
                                                target, &written);
        FillConsoleOutputAttribute(GetStdHandle(STD_OUTPUT_HANDLE), attribute,
                                                csbi.dwSize.X * csbi.dwSize.Y,
                                                target, &written);
    }
    
    void DruckSimpleText(int x, int y, char const *text)
    {
        COORD target = {x, y};
        DWORD written;
    
        WriteConsoleOutputCharacter(GetStdHandle(STD_OUTPUT_HANDLE), text,
                                                strlen(text),
                                                target, &written);
    }
    
    void SetCursorPosition(int x, int y)
    {
        COORD pos = {x, y};
    
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
    }
    
    int main()
    {
    	ClearScreen(FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN | BACKGROUND_BLUE);
    
    	SetCursorPosition(0, 0);
    
    	DruckSimpleText(5, 5, "Test - Ausgabe");
    }
    


  • Er hat da im Projekt, das er verlinkt hat, etwas von Resourcendateien stehen. Meist bedeutet das, er hat nicht die Win32-Console bei der Projektbildung eingestellt?

    MfG f.-th.



  • ... oder einfach:

    #include <windows.h>
    
    #include <iostream>
    
    using namespace std;
    
    void ClearScreen(WORD attribute = 7)
    {
        CONSOLE_SCREEN_BUFFER_INFO csbi;
        COORD target = {0, 0};
        DWORD written;
    
        GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
        FillConsoleOutputCharacter(GetStdHandle(STD_OUTPUT_HANDLE), ' ',
                                                csbi.dwSize.X * csbi.dwSize.Y,
                                                target, &written);
        FillConsoleOutputAttribute(GetStdHandle(STD_OUTPUT_HANDLE), attribute,
                                                csbi.dwSize.X * csbi.dwSize.Y,
                                                target, &written);
    }
    
    int main()
    {
    	ClearScreen(FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN | BACKGROUND_BLUE);
    	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN | BACKGROUND_BLUE);
    	cout << "test\n";
    }
    


  • Oh! Das was Belli mir gegeben hat als letztes ging aufeinmal! 😮

    Ja das ist das was ich gesucht habe! Danke nochmal für eure Mühe! 👍

    Doch die Frage stellt sich mir immer: Wieso dieser große Aufwand?
    Ist das nicht normalerweise eine kleinigkeit mit ein paar kurzen Handgriffen? 😕



  • Das sind doch nur ein paar Handgriffe?! Nach

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | 
    FOREGROUND_BLUE | FOREGROUND_GREEN | BACKGROUND_BLUE);
    

    werden alle Ausgaben wie gewünscht dargestellt.
    Die Funktion ClearScreen dient nur dazu, einmal den Bildschirm zu löschen (mit der gewünschten Hintergrundfarbe).



  • Damit habe ich auch nicht dich gemeint. 😉



  • Muss noch hinzufügen das deine Schrift nicht weiß ist sondern grau! 😛



  • Programmier-Idiot schrieb:

    Doch die Frage stellt sich mir immer: Wieso dieser große Aufwand?
    Ist das nicht normalerweise eine kleinigkeit mit ein paar kurzen Handgriffen? 😕

    Wenn du damit mich meinst:
    CoreAPI ist eig. für viel mehr gemacht.Die Farbgebung wird da für viel mehr verwendet als für "bloßen text"

    Ich arbeite gerade an ner neuen version deswegen entschuldige ich mich dafür das es nicht funktioniert hat, normalerweise sollte das nicht vorkommen.

    zurück zum aufwand:Du kannst z.B. Buttons in die Console einbauen oder eigene Fenster.Das ganze ntürlich nur auf ASCII/Textbasis, doch es sieht in der console echt nice aus.Du kannst es dir z.B. wie im bios menü vorstellen. 😉



  • Programmier-Idiot schrieb:

    Muss noch hinzufügen das deine Schrift nicht weiß ist sondern grau! 😛

    Dann setz noch zusätzlich das Flag intensiv.



  • Okay! Trotzdem dankeschön! 🙂


Anmelden zum Antworten