Probleme mit Double Buffering
-
Hallo!
Beim Zeichnen meiner eigenen ToolBar habe ich Probleme mit dem double buffering.
Wenn ich "herkömmlich" ein ButtonRect beim Mouseover zeichne flackert es. Nun habe ich mir gedacht: Mit double buffering wird nichts mehr flackern und mir kurzerhand eine vorläufige Miniklasse namen CMemDC erstellt. Nun flackert zwar nichts mehr, aber wenn ich nur ein ButtonRect mit double buffering zeichne (genauso wie ohne) flackert es zwar nicht mehr, aber andere Bereiche sind komplett schwarz. Da ich leider kaum Ahnung von Zeichengelumpe habe, fände ich es klasse wenn mir jemand einen Tip geben könnte. Hier der Source der CMemDC:namespace GUIHelper { class CMemDC : public ::CDC { private: ::RECT *m_prc; ::CDC *m_pDC; ::CBitmap *m_pOldBitmap; ::CBitmap m_MemBitmap; public: CMemDC() : m_prc(0), m_pDC(0), m_pOldBitmap(0) {} CMemDC(::CDC &dc, ::RECT &rc) : m_prc(0), m_pDC(0), m_pOldBitmap(0) { this->m_prc = &rc; this->m_pDC = &dc; CreateMemDC(dc, rc); } ~CMemDC() { this->m_prc = 0; this->m_pDC = 0; this->m_pOldBitmap = 0; } bool CreateMemDC(CDC &dc, ::RECT &rc) { this->m_prc = &rc; this->m_pDC = &dc; if (!CDC::CreateCompatibleDC(&dc)) return false; if (!this->m_MemBitmap.CreateCompatibleBitmap(this->m_pDC, this->m_prc->right, this->m_prc->bottom)) return false; this->m_pOldBitmap = ::CDC::SelectObject(&this->m_MemBitmap); return true; } bool BendBackToDC(void) { if (!this->m_pDC->BitBlt(0, 0, this->m_prc->right, this->m_prc->bottom, this, 0, 0, SRCCOPY)) return false; ::CDC::SelectObject(this->m_pOldBitmap); return true; } }; }
-
Als MemDC empfehle ich immer und immer wieder den hier:
http://www.codeproject.com/gdi/flickerfree.aspIst denke ich das beste du übernimmst einfach den MemDC

Grüssli
-
Dravere schrieb:
Als MemDC empfehle ich immer und immer wieder den hier:
http://www.codeproject.com/gdi/flickerfree.aspSuper. Es klappt schonmal danke.
Dravere schrieb:
Ist denke ich das beste du übernimmst einfach den MemDC

Ich werde mir mal den Code anschauen und meinen Fehler suchen.