Inhalt der Konsole "fixieren"



  • Hallo,

    nach einer verzweifelten Fehlersuche, weshalb sich der Inhalt einer Windows-Konsole verschiebt, wenn man dessen Größe ändert, habe ich festgestellt, das dies ganz normales Verhalten scheint. Denn auch wenn man mit dem Mauszeiger die Größe ändert, verschiebt sich der Inhalt dynamisch zur Größe.

    Jetzt suche ich eine Möglichkeit, den Inhalt zu "fixieren", so das dieser bei egal welcher Größe immer die selbe Struktur hat.

    Die Konsole nach jeder Änderung neu befüllen oder löschen und befüllen, ist leider keine gute Lösung, weil es trotzdem ein furchtbares Artefakte-Flackern ergibt.



  • Rechtsklick auf die Titelleiste -> Eigenschaften -> Reiter "Layout" -> Haken bei "Textausgabe bei Größenänderung umbrechen" entfernen.



  • Aha, danke 🙂

    Muss ich mir mal genauer anschauen. Auf den ersten Blick sieht das ganz hilfreich aus, allerdings werden dabei bestimmte Werte ignoriert. Aber sonst würde das vielleicht auch nicht funktionieren wie es funktioniert.

    Weißt Du vielleicht auch, ob es eine entsprechende WinAPI-Funktion dafür gibt?



  • nein so direkt nicht. aber ich habe eben einfach "winapi console" in die suchmaschine eingegeben und diverse funktionen gefunden, die für so etwas zuständig sein könnten.

    allerdings kannst du das auch selbst durchprobieren. 😉



  • Du könntest Deinem Konsolenfenster eine feste, unveränderliche Größe geben, das kannst Du dann auch mit einer WinAPI - Funktion erledigen ...



  • Ich wollte einen Effekt testen, in dem beim kontinuierlichen Vergrößern und Verkleinern des Konsolenfenster verschiedene Varianten des Inhalt dargestellt werden. Einmal wird die Grafik dynamisch angepasst, einmal unverändert gelassen.

    In vertikaler Richtung gibt es keine Probleme, aber in horizontaler.

    for ( int ms = move_max; ms >= move_min; ms -=2 )
            {
                console.resize( ms, size_y ); //Konsole wird in x-Richtung verkleinert
                /* -> in diesem Moment wird der Inhalt der Konsole verzerrt dargestellt*/
                std::cin.get();
                console.resizeToCenter(); //Konsole wird zentriert
                draw.getCoords(); //Werte der Grafik an die Konsolenwerte angepasst
                paint.getCoords(); // ...
                draw.resizeCenterToWindow(); //Koordinatenursprung in Zentrum der Konsole gesetzt
    
                paintModularColors( paint, paint_ch_name );
                drawForms( draw, draw.getCenterX(), draw.getCenterY(), draw_ch_name, sh_col, 1 );
                drawForms( draw, draw.getCenterX(), draw.getCenterY(), draw_ch_name, l_col, 0 );
                console.writeBuffer();  /* -> ab hier wieder korrekt*/
                Sleep( sleep );
            }
    

    Dieser kleine Moment, in dem die Konsole verändert, bevor sie neu gefüllt wird, verursacht sichtbare Störungen. Ich könnte an dieser Stelle die Konsole leeren, dadurch gibt es aber das bekannte Flackern, wenn ständig die Konsole geleert und gefüllt wird.



  • Oh, schön, das klappt ja doch ganz gut, danke.

    Ich schätze aber, an die Änderungen über das Eigenschaften-Fenster der Konsole kommt man mit der Console-WinAPI-Funktionen nicht so einfach ran? Da braucht man dann die Windows-WinAPI-Funktionen?




Log in to reply