<?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[Doublebuffer: Finde den Fehler nicht!]]></title><description><![CDATA[<p>Moin, moin,</p>
<p>folgender Code liefert mir nur einen schwarzen Bildschirm:</p>
<pre><code class="language-cpp">static void drawpoints(struct state *st) {
	HDC hdc = GetDC(st-&gt;window);
	HDC hdcMem = CreateCompatibleDC(hdc);

	// in den Buffer (hdcMem) zeichnen

	// erstmal alles schwarz machen
	FillRect(hdcMem, &amp;myScreenSize, (HBRUSH)GetStockObject(BLACK_BRUSH));

	// und Punkte in den Buffer zeichnen
	for (int i = 0; i &lt; st-&gt;npoints; i++) {
		SetPixel(hdcMem, st-&gt;pointbuf[i].x, st-&gt;pointbuf[i].y, st-&gt;colours[st-&gt;ccolour]);
	}

	// und wusch und swap
	BitBlt(hdc, 0, 0, myScreenSize.right, myScreenSize.bottom, hdcMem, 0, 0, SRCCOPY);

	ReleaseDC(st-&gt;window, hdcMem);
	ReleaseDC(st-&gt;window, hdc);

	DeleteDC(hdcMem);
	DeleteDC(hdc);

	st-&gt;ccolour++;		// nächster Farbdurchlauf
	st-&gt;npoints = 0;	// Pointbuffer zurücksetzen
}
</code></pre>
<p>Das setzen der Pixel direkt in den DC (also hdc anstatt hdcMem) funktioniert übigens hervorragend - flackert natürlich wie Wild!</p>
<p>Jemand spontan ein Idee?</p>
<p>--<br />
Beste Grüße<br />
Timmix</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/161588/doublebuffer-finde-den-fehler-nicht</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Jul 2026 08:40:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/161588.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 08 Oct 2006 15:01:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Doublebuffer: Finde den Fehler nicht! on Sun, 08 Oct 2006 15:01:48 GMT]]></title><description><![CDATA[<p>Moin, moin,</p>
<p>folgender Code liefert mir nur einen schwarzen Bildschirm:</p>
<pre><code class="language-cpp">static void drawpoints(struct state *st) {
	HDC hdc = GetDC(st-&gt;window);
	HDC hdcMem = CreateCompatibleDC(hdc);

	// in den Buffer (hdcMem) zeichnen

	// erstmal alles schwarz machen
	FillRect(hdcMem, &amp;myScreenSize, (HBRUSH)GetStockObject(BLACK_BRUSH));

	// und Punkte in den Buffer zeichnen
	for (int i = 0; i &lt; st-&gt;npoints; i++) {
		SetPixel(hdcMem, st-&gt;pointbuf[i].x, st-&gt;pointbuf[i].y, st-&gt;colours[st-&gt;ccolour]);
	}

	// und wusch und swap
	BitBlt(hdc, 0, 0, myScreenSize.right, myScreenSize.bottom, hdcMem, 0, 0, SRCCOPY);

	ReleaseDC(st-&gt;window, hdcMem);
	ReleaseDC(st-&gt;window, hdc);

	DeleteDC(hdcMem);
	DeleteDC(hdc);

	st-&gt;ccolour++;		// nächster Farbdurchlauf
	st-&gt;npoints = 0;	// Pointbuffer zurücksetzen
}
</code></pre>
<p>Das setzen der Pixel direkt in den DC (also hdc anstatt hdcMem) funktioniert übigens hervorragend - flackert natürlich wie Wild!</p>
<p>Jemand spontan ein Idee?</p>
<p>--<br />
Beste Grüße<br />
Timmix</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1151466</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1151466</guid><dc:creator><![CDATA[timmix]]></dc:creator><pubDate>Sun, 08 Oct 2006 15:01:48 GMT</pubDate></item><item><title><![CDATA[Reply to Doublebuffer: Finde den Fehler nicht! on Sun, 08 Oct 2006 15:16:11 GMT]]></title><description><![CDATA[<p>Hoi,</p>
<p>Also erstmal bringst du die Aufrufe von ReleaseDC und DeleteDC drucheinander <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> :</p>
<p>-&gt; GetDC/ReleaseDC<br />
-&gt; CreateCompatibleDC/DeleteDC</p>
<p>Zweitens musst du in hdcMem ne Bitmap einsetzen in die gezeichnet wird <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /><br />
Hier bitte auch beachten:</p>
<p>MSDN zu SelectObject(...) schrieb:</p>
<blockquote>
<p>This function returns the previously selected object of the specified type. <strong>An application should always replace a new object with the original, default object after it has finished drawing with the new object.</strong></p>
</blockquote>
<p>und drittens -falls das immer noch nix bringt- prüf mal den Return-Wert (vllt auch mit GetLastError) von GetDC ( <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> Stimmen die Werte von st-&gt;window und myScreenSize ?).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1151478</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1151478</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Sun, 08 Oct 2006 15:16:11 GMT</pubDate></item><item><title><![CDATA[Reply to Doublebuffer: Finde den Fehler nicht! on Sun, 08 Oct 2006 16:34:20 GMT]]></title><description><![CDATA[<p>CodeFinder schrieb:</p>
<blockquote>
<p>( ... )<br />
Zweitens musst du in hdcMem ne Bitmap einsetzen in die gezeichnet wird <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /><br />
( ... )</p>
</blockquote>
<p>Heyho,</p>
<p>super scheint jetzt zu funktionieren! Danke.</p>
<p>Allerdings flackert folgendes immer noch wie wild:</p>
<pre><code class="language-cpp">static void drawpoints(struct state *st) {
	HDC                hdc        = GetDC(st-&gt;window);
	static HBITMAP     hBitmap    = CreateCompatibleBitmap(hdc, myScreenSize.right, myScreenSize.bottom);
	static HDC         hdcMem     = CreateCompatibleDC(hdc);

	ReleaseDC(st-&gt;window, hdc);

	SelectObject(hdcMem, hBitmap);

	// erstmal alles schwarz machen
	FillRect(hdcMem, &amp;myScreenSize, (HBRUSH)GetStockObject(BLACK_BRUSH));

	// und Punkte im Buffer zeichnen
	for (int i = 0; i &lt; st-&gt;npoints; i++) {
		SetPixel(hdcMem, st-&gt;pointbuf[i].x, st-&gt;pointbuf[i].y, st-&gt;colours[st-&gt;ccolour]);
	}

	// Swap Buffer
	BitBlt(hdc, 0, 0, myScreenSize.right, myScreenSize.bottom, hdcMem, 0, 0, SRCCOPY);

	st-&gt;ccolour = 16;	// Todo: Farbdurchlauf (ccolour++)
	st-&gt;npoints = 0;	// Pointbuffer zurücksetzen
}
</code></pre>
<p>... verstehe ich nicht, ich zeichne doch im Speicher? Könnte das flackern daran liegen, dass ich derzeit (noch) den gesamten Bildschirm &quot;blitte&quot;?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1151515</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1151515</guid><dc:creator><![CDATA[timmix]]></dc:creator><pubDate>Sun, 08 Oct 2006 16:34:20 GMT</pubDate></item><item><title><![CDATA[Reply to Doublebuffer: Finde den Fehler nicht! on Sun, 08 Oct 2006 18:42:42 GMT]]></title><description><![CDATA[<p>timmix schrieb:</p>
<blockquote>
<p>... verstehe ich nicht, ich zeichne doch im Speicher? Könnte das flackern daran liegen, dass ich derzeit (noch) den gesamten Bildschirm &quot;blitte&quot;?</p>
</blockquote>
<p>Hm jo daran kann das liegen^^...den ganzen Bildschirm uji^^....</p>
<p>Naja hier vllt noch n paar Tipps:<br />
1. Probier mal das:</p>
<pre><code class="language-cpp">// in der WndProc:
case WM_ERASEBKGND:
   return (1L);
</code></pre>
<p>2. Setze die beiden Style CS_HREDRAW und CS_VREDRAW nicht in deiner WNDCLASSEX-Strukur, falls du überhaupt mit Std-Fenstern arbeitest.</p>
<p>Dann vllt. nochwas:<br />
Wenn du die Funktionen sehr oft hintereinander aufruft, ist der Double-Buffer-Effekt natürlich weg <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="😉"
    /> , ist klar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1151617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1151617</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Sun, 08 Oct 2006 18:42:42 GMT</pubDate></item></channel></rss>