Double Buffering - Was ist falsch?
-
Hallo zusammen,
also ich hatte hier ja schonmal nach Double Buffering gefragt... habe nun im Netz gesucht und gesucht und mir daraufhin die folgende Lösung gebastelt, welche jedoch leider nicht funktioniert.
Ich möchte für einen Button beim Klick das Bild ändern... dies funktioniert indem ich einen Button mit BS_OWNERDRAW erzeuge und dann in der Funktion DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) darauf reagiere. Nun bemerke ich jedoch ab und zu ein Flackern beim Bilderwechsel, welches wohl mit Double Buffering behoben werden soll... dazu habe ich folgendes gemacht.
CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC); CDC *pMemDC = new CDC; pMemDC->CreateCompatibleDC(pDC); // Nun nur auf Memory zeichnen und nacher kopieren CRect oButtonRect; GetClientRect(oButtonRect); CBrush oBrush(RGB(0xff,0xff,0xff)); pMemDC->SelectObject(&oBrush); pMemDC->Rectangle(&oButtonRect); // Kopieren pDC->BitBlt(0, 0, oButtonRect.Width(), oButtonRect.Height(), pMemDC, 0, 0, SRCCOPY);Aber der Button wird nicht weiß... (also sollte er ja weil ich ein weißes Rechteck zeichne...) er bleibt grau... Wenn ich anstelle von pMemDC alles auf pDC "schreibe" geht es und dann das kopieren nicht durchführe...
Wieso? Was ist falsch?
Danke
Jogilein
-
Verwende die CMemDC Klasse http://www.codeproject.com/gdi/flickerfree.asp
Du erzeugst doch gar keine neue Bitmap, wie soll das gehen. Nur mit einem neuen DC ist es nicht getan!
Grundsätzlich ist das aber nur der erste Ansatz. Ohne das überschreiben von OnEraseBkgnd geht hier nichts.
Lies den Artikel!
-
Ahh super
Jetzt geht alles 
Danke für die Hilfe..