Konsolenfarbe ändern (Problem)



  • Ich brauche für ein Programm die Möglichkeit einen bestimmten Textausschnitt mit einer anderen Hintergrundfarbe zu schreiben.

    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
    
    int main()
    {
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 31);
        printf("Hello world!");
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
    
        return 0;
    }
    

    Mit diesem Codebeispiel funktioniert das genau so wie ich es mir vorstelle. (Hello World! wird in diesem Fall hellweiß mit blauen Hintergrund (31) geschrieben) Danach setze ich die Schrift wieder auf das Standardweiß (7).

    Mein Problem ist jetzt wenn ich die Konsole auf Vollbild oder einfach nur etwas größer mache, ändert sich das Format so das nicht nur Hello World mit blauen Hintergrund geschrieben ist, sondern die gesamte Zeile Blau ist.
    Wie kann ich das lösen dass das Format immer gleich bleibt auch wenn die Konsole größer gezogen wird?

    mfg



  • Zu dem Zeitpunkt, an dem Du das Fenster größer ziehst, hat Dein Programm schon keine Kontrolle mehr über die Konsole, da es da schon beendet ist.



  • Swordfish schrieb:

    Zu dem Zeitpunkt, an dem Du das Fenster größer ziehst, hat Dein Programm schon keine Kontrolle mehr über die Konsole, da es da schon beendet ist.

    was meinst du mit schon beendet?

    Hier tritt das Problem auf:

    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
    
    int main()
    {
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 31);
        printf("Hello world!\n");
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
        system("Pause");
    
        return 0;
    }
    

    Hier nicht mehr:

    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
    
    int main()
    {
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 31);
        printf("Hello world!");
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
        printf(".\n");
        system("Pause");
    
        return 0;
    }
    

    Nur finde ich die Lösung einen Punkt (oder sonst irgendein druckbares Zeichen) zu schreiben nur das er in der Zeile nochmal die Farbe switcht relativ unpraktisch...



  • statt einem druckbaren Zeichen, könntest du es so machen:

    printf("%c", 255);
    


  • Irgendwie scheint das ein Bug bzw. Programmfehler in der Console zu sein. Schick das Problem doch mal an Microsoft.



  • Kenjy schrieb:

    Swordfish schrieb:

    Zu dem Zeitpunkt, an dem Du das Fenster größer ziehst, hat Dein Programm schon keine Kontrolle mehr über die Konsole, da es da schon beendet ist.

    was meinst du mit schon beendet?

    Vgl.

    Kenjy schrieb:

    // ...
    
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
            // <<--
        return 0;
    }
    

    vs.

    Kenjy schrieb:

    // ...
    
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
        system("Pause");  // <<--
    
        return 0;
    }
    


  • Swordfish schrieb:

    Kenjy schrieb:

    Swordfish schrieb:

    Zu dem Zeitpunkt, an dem Du das Fenster größer ziehst, hat Dein Programm schon keine Kontrolle mehr über die Konsole, da es da schon beendet ist.

    was meinst du mit schon beendet?

    Vgl.

    Kenjy schrieb:

    // ...
    
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
            // <<--
        return 0;
    }
    

    vs.

    Kenjy schrieb:

    // ...
    
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
        system("Pause");  // <<--
    
        return 0;
    }
    

    nicht falsch verstehen aber was hat das mit seiner Frage zu tun?
    system("Pause") kann sich ja jeder dazu denken 😃
    würde wie gesagt auch auf einen Bug tippen 😉



  • pixelFront schrieb:

    nicht falsch verstehen aber was hat das mit seiner Frage zu tun?

    Solange das Programm noch läuft, kann es etwas daran ändern, was auf dem Bildschirm steht. Danach nimmer.

    pixelFront schrieb:

    system("Pause") kann sich ja jeder dazu denken 😃

    Wer will das schon?

    pixelFront schrieb:

    würde wie gesagt auch auf einen Bug tippen 😉

    Jo.


Log in to reply