DoubleBuffer und Retrace?



  • Hi zusammen,

    ich hätte mal eine kleine Frage zur Konsole.
    Wie kriege ich den Inhalt eines Array[40][80] schnell in die Konsole?
    zZ. benutze ich for schleifen, dadurch ergibt sich aber das Problem
    dass das letzte Zeichen einen Zeilenumbruch macht und den ganzen Inhalt
    um eine Zeile nach oben schiebt. Irgendwie bräuchte ich etwas mit dem ich
    meinen Array direkt in die Adresse der Konsole schieben kann...
    Kann mir jemand n Tip in die Richtige richtung geben?

    Zur zweiten Frage. Kann man in der Konsole den Retrace abwarten? zZ. flackert
    mein Lauftext ziemlich übel.

    Ich arbeite mit MSVC++6.

    Vielen Dank!



  • Das schnellste ist, wenn Du verschiedene ScreenBuffer verwendest und diese dann einfach umschaltest:
    - CreateConsoleScreenBuffer
    - SetConsoleActiveScreenBuffer

    Siehe:
    Reading and Writing Blocks of Characters and Attributes
    http://msdn.microsoft.com/library/en-us/dllproc/base/reading_and_writing_blocks_of_characters_and_attributes.asp



  • Jochen Kalmbach schrieb:

    Das schnellste ist, wenn Du verschiedene ScreenBuffer verwendest und diese dann einfach umschaltest:
    - CreateConsoleScreenBuffer
    - SetConsoleActiveScreenBuffer

    Ist es inzwischen nicht schneller einen doppelt so hohen ScreenBuffer zu verwenden und diesen zu scrollen? Naja auf jeden Fall in einem Zug schreiben und auf gar keinen Fall mit cout oder Ähnlichem.

    unregistered schrieb:

    dadurch ergibt sich aber das Problem
    dass das letzte Zeichen einen Zeilenumbruch macht und den ganzen Inhalt
    um eine Zeile nach oben schiebt.

    Nein, das passiert auch mit allen anderen Möglichkeiten, das kannst du verhindern indem du mit SetConsoleMode() [ http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/setconsolemode.asp ] ENABLE_WRAP_AT_EOL_OUTPUT *ausschaltest*.

    Siehe auch Implementierung der Improved Console auf http://ic.sidewindershome.net

    MfG SideWinder



  • SideWinder schrieb:

    Jochen Kalmbach schrieb:

    Das schnellste ist, wenn Du verschiedene ScreenBuffer verwendest und diese dann einfach umschaltest:
    - CreateConsoleScreenBuffer
    - SetConsoleActiveScreenBuffer

    Ist es inzwischen nicht schneller einen doppelt so hohen ScreenBuffer zu verwenden und diesen zu scrollen?

    Das mag zwar schneller sein, der Nachteil ist, dass der Benutzer ja selber scrollen kann... oder kann man das verhindern?



  • Stimmt natürlich auch wieder, allerdings hat der User keine Zeit zu scrollen (Umsonst muss der Programmierer sich ja keine Gedanken machen so oft neu zu zeichnen ;))

    Aber okay, okay, überredet 😉

    MfG SideWinder



  • Vielen Dank!
    Genau das hab ich gesucht!
    Juhuu... gleich weiter machen 🙂



  • ich abs net getsetet aber müsste net

    std::cout << "\b";
    

    gehen?
    das escape zeicen ist doch backspace odeR????



  • Ja, dieses Escapezeichen ist Backspace. Aber ansonsten habe ich nicht den blassesten Schimmer was du uns hier erzählen willst 🙄

    MFG SideWinder


Log in to reply