Flimmern... (Doppelbufferung?)



  • Hallo!

    Also mein Problem ist glaube ich recht einfach und ich meine auch das diese Frage schon mal gestellt wurde aber leider gibt es ja die Suchfunktion nicht mehr...

    Ich zeichne in der Funktion OnDraw meiner Ansichtsklasse, nur da die Zeichnung recht umfangreich ist kommt es zum Flimmern. Wie realisiere ich eine Dopperbufferung????



  • Ein Codeschnipsel von mir:

    ASSERT(this);
        ASSERT((HBITMAP)m_backgroundBitmap);
    
        CDC paintDC;
        VERIFY(paintDC.CreateCompatibleDC(&dc));
        CBitmap paintBmp;
        VERIFY(paintBmp.CreateCompatibleBitmap(&dc,r.right,r.bottom));
        CBitmap* oldPaintBmp=paintDC.SelectObject(&paintBmp);
        ASSERT(oldPaintBmp);
    
        CDC memdc;
        VERIFY(memdc.CreateCompatibleDC(&dc));
    
        CBitmap* pOldBitmap=memdc.SelectObject((CBitmap*)&m_backgroundBitmap);
        ASSERT(pOldBitmap);
        FORI((r.right+startx)/m_backgroundBitmapSize.cx+1,x)
            FORI((r.bottom+starty)/m_backgroundBitmapSize.cy+1,y)
                paintDC.BitBlt(
                    x*m_backgroundBitmapSize.cx-startx,
                    y*m_backgroundBitmapSize.cy-starty,
                    m_backgroundBitmapSize.cx,
                    m_backgroundBitmapSize.cy,
                    &memdc,0,0,SRCCOPY);
            END_FOR
        END_FOR
    
        VERIFY(dc.BitBlt(0,0,r.right,r.bottom,&paintDC,0,0,SRCCOPY));
        paintDC.SelectObject(oldPaintBmp);
        memdc.SelectObject(pOldBitmap);
    


  • Kann mir einer mal erklären was DoppelBufferung ist?



  • Man zeichnet zuerst in einen temporäres DC und überträgt diesen dann komplett in das ZielDC

    Wenn man den Hintergrund blau übermalt und anschließend einen weißen Text drüber ausgibt dann wird der Text beim neuzeichnen mit blau übermalt und anschließend wieder mit weiß. Und wenn das oft hintereinader geschieht sieht man den Text flimmern.


Anmelden zum Antworten