<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Double Buffering - Was ist falsch?]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>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.</p>
<p>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.</p>
<pre><code class="language-cpp">CDC *pDC = CDC::FromHandle(lpDrawItemStruct-&gt;hDC);
CDC *pMemDC = new CDC;
pMemDC-&gt;CreateCompatibleDC(pDC);

// Nun nur auf Memory zeichnen und nacher kopieren
CRect oButtonRect;
GetClientRect(oButtonRect);
CBrush oBrush(RGB(0xff,0xff,0xff));
pMemDC-&gt;SelectObject(&amp;oBrush);
pMemDC-&gt;Rectangle(&amp;oButtonRect);

// Kopieren
pDC-&gt;BitBlt(0, 0, oButtonRect.Width(), oButtonRect.Height(), pMemDC, 0, 0, SRCCOPY);
</code></pre>
<p>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 &quot;schreibe&quot; geht es und dann das kopieren nicht durchführe...</p>
<p>Wieso? Was ist falsch?</p>
<p>Danke<br />
Jogilein</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/171407/double-buffering-was-ist-falsch</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Apr 2026 02:50:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/171407.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 25 Jan 2007 09:10:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Double Buffering - Was ist falsch? on Thu, 25 Jan 2007 09:10:06 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>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.</p>
<p>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.</p>
<pre><code class="language-cpp">CDC *pDC = CDC::FromHandle(lpDrawItemStruct-&gt;hDC);
CDC *pMemDC = new CDC;
pMemDC-&gt;CreateCompatibleDC(pDC);

// Nun nur auf Memory zeichnen und nacher kopieren
CRect oButtonRect;
GetClientRect(oButtonRect);
CBrush oBrush(RGB(0xff,0xff,0xff));
pMemDC-&gt;SelectObject(&amp;oBrush);
pMemDC-&gt;Rectangle(&amp;oButtonRect);

// Kopieren
pDC-&gt;BitBlt(0, 0, oButtonRect.Width(), oButtonRect.Height(), pMemDC, 0, 0, SRCCOPY);
</code></pre>
<p>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 &quot;schreibe&quot; geht es und dann das kopieren nicht durchführe...</p>
<p>Wieso? Was ist falsch?</p>
<p>Danke<br />
Jogilein</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1216642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1216642</guid><dc:creator><![CDATA[Jogilein]]></dc:creator><pubDate>Thu, 25 Jan 2007 09:10:06 GMT</pubDate></item><item><title><![CDATA[Reply to Double Buffering - Was ist falsch? on Thu, 25 Jan 2007 10:42:03 GMT]]></title><description><![CDATA[<p>Verwende die CMemDC Klasse <a href="http://www.codeproject.com/gdi/flickerfree.asp" rel="nofollow">http://www.codeproject.com/gdi/flickerfree.asp</a></p>
<p>Du erzeugst doch gar keine neue Bitmap, wie soll das gehen. Nur mit einem neuen DC ist es nicht getan!</p>
<p>Grundsätzlich ist das aber nur der erste Ansatz. Ohne das überschreiben von OnEraseBkgnd geht hier nichts.</p>
<p>Lies den Artikel!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1216738</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1216738</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 25 Jan 2007 10:42:03 GMT</pubDate></item><item><title><![CDATA[Reply to Double Buffering - Was ist falsch? on Fri, 26 Jan 2007 15:10:55 GMT]]></title><description><![CDATA[<p>Ahh super <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Jetzt geht alles <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Danke für die Hilfe..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1217654</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1217654</guid><dc:creator><![CDATA[Jogilein]]></dc:creator><pubDate>Fri, 26 Jan 2007 15:10:55 GMT</pubDate></item></channel></rss>