DoubleBuffering funktioniert nicht.



  • Ich versuche gerade meine Ausgabe das Flackern abzugewöhnen. Dazu unten stehender Code, der in View::OnDraw() ausgeführt wird. Leider wird nichts angezeigt, ein Fehler kommt im Debugger aber nicht. Was läuft hier falsch?

    CVersimToolDoc* pDoc = GetDocument();
    	CDC* AusgabeDC = (CDC*) GetDC();
    
    	BOOL fail;
    
    	CRect rClient;
    	GetClientRect(rClient);
    
    	// Zwischenspeicher zur Vermeidung des Flackern
    	CDC* pDC = new CDC;
    	fail = pDC->CreateCompatibleDC(AusgabeDC);
    	ASSERT(fail);
    
    	pDC->SetBkMode(TRANSPARENT);
    
    	pDC->SelectObject(Font_Info);
    
    	Frontend();
    
    // Ausgabe Anfang
    	pDC->DrawText("Test",GetRect(0,3,0,1),DT_WORDBREAK);
    
    // hier stehen noch einige DrawText Befehle
    //
    
    	AusgabeDC->BitBlt(0,0,rClient.right,rClient.bottom,pDC,0,0,SRCCOPY);
    
    	ReleaseDC(pDC);
    	ReleaseDC(AusgabeDC);
    

  • Mod

    1. Warum verwendest Du keinen fertigen Code von
    http://www.codeproject.com/gdi/flickerfree.asp?

    2. Warum verwendest Du nicht den DC der durch OnDraw übergeben wird.

    3. Kosmetisch CreateCompatibeDC liefert TRUE wenn es Erfolg hatte. Der Name BOOL succeeded; würde das Ergebnis besser wiedergeben.
    Begründung: fail, hätte bei Dir den Wert !=0 (TRUE), wenn alles erfolgreich war.


Anmelden zum Antworten