mehrmaliges OnPaint - Bildschirm flackert



  • Hallo,

    ich möchte eine Liste ausgeben. Bis die Liste gefüllt ist, vergeht ein bisschen an Zeit. Deswegen wird die gesammte Liste neu gemalt, wenn ein neuer Eintrag dazukommt. Leider flackert dann das Bild, obwohl sich der sichtbare Bereich gar nicht mehr ändert.
    Welche Tricks gibts dafür?
    Hier ein Code-Ausschnitt:

    void MyView::OnListElementAdded(CString& strElement)
    {
       mListe.Add(strElement);
       Invalidate(TrueFalse??);
       UpdateWindow();
    }
    void MyView::OnPaint() 
    {
        CPaintDC dc(this);
        //male Liste
    }
    

    Vielleicht kommt man hier auch mit irgendwelchen Animationstricks weiter. Leider habe ich bis jetzt nur Infos gefunden für die statische Ausgabe mit DeviceContext, bzw das ist ja eigentlich auch der Normalfall.

    Bin dankbar für jede Hilfe.
    Gruß



  • Es gibt noch ein InvalidateRect (heisst das glaub ich), damit wird dann soweit ich weiss nur der angegeben Bereich neu gezeichnet, wenn er sich ausserhalb des sichtbaren Bereichs befindet sollte es dann eigentlich nicht zu erkennen sein (also kein flacker etc.)



  • Hast du mal probiert, das Invalidate wegzulassen? Normalwerweise sollte das Listcontrol sich darum selbst kümmern.

    Windows wartet mit WM_PAIN - Messages bis keine anderen messages (außer WM_TIMER) in der Message Queue für den thread stehen. Solange dein Messagehandler "busy" ist, vbekommt das Fenster das WM_PAINT natürlich nicht. Mit UpdateWindow erzwingst du ein sofortiges neuzeichnen der Invalidated-Region.



  • Danke erstmal für die Tipps.
    So ganz haut das noch nicht hin. Muss wohl noch einiges an Zeit investieren.
    Übrigens flackert das Fenster auch beim resize (da flackert fast jedes Fenster), aber meines besonders stark 😞


Anmelden zum Antworten