<?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[Neuzeichnen vieler Bitmaps]]></title><description><![CDATA[<p>Hallo, mal wieder ich<br />
und mal wieder ein eigentlich simples aber für mich komisches Problem.<br />
Der Code erklärt sich ja im Prinzip von selbst.<br />
Ich habe eine große Bitmap als Hintergrund und eine kleine (Kugel) die sich nun<br />
über die große Bitmap bewegt. Das ganze ja demzufolge in einer Schleife.<br />
Die Kugelbewegt sich zwar, wird aber nicht von der alten Position gelöscht.<br />
Das heißt, ich sehe die Bewegungsspur der Bitmap. Oder muss ich noch sowas wie FillRect() verwenden?</p>
<pre><code class="language-cpp">PAINTSTRUCT ps;  
			HDC Bildhdc;

			Bildhdc = BeginPaint (hWnd, &amp;ps); 

			HDC Bufferhdc, Kugelhdc; 
			Bufferhdc = CreateCompatibleDC(Bildhdc);
			Kugelhdc = CreateCompatibleDC(Bildhdc);

			HBITMAP HBMP_OldBuffer = (HBITMAP) SelectObject(Bufferhdc, HBMP_Buffer);
			HBITMAP HBMP_OldKugel = (HBITMAP) SelectObject(Kugelhdc, HBMP_Kugel);

			TransparentBlt(Bufferhdc, X, Y, 16, 16, Kugelhdc, 0, 0, 16, 16, RGB(255,0,255));
			BitBlt(Bildhdc, 0, 0, 400, 350, Bufferhdc, 0, 0, SRCCOPY);

			SelectObject(Bildhdc, HBMP_OldBuffer); 
			SelectObject(Bildhdc, HBMP_OldKugel); 
			DeleteDC(Bufferhdc); 
			DeleteDC(Kugelhdc);

			EndPaint( hWnd, &amp;ps );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/96065/neuzeichnen-vieler-bitmaps</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Apr 2026 03:44:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/96065.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 27 Dec 2004 21:03:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Neuzeichnen vieler Bitmaps on Mon, 27 Dec 2004 21:03:53 GMT]]></title><description><![CDATA[<p>Hallo, mal wieder ich<br />
und mal wieder ein eigentlich simples aber für mich komisches Problem.<br />
Der Code erklärt sich ja im Prinzip von selbst.<br />
Ich habe eine große Bitmap als Hintergrund und eine kleine (Kugel) die sich nun<br />
über die große Bitmap bewegt. Das ganze ja demzufolge in einer Schleife.<br />
Die Kugelbewegt sich zwar, wird aber nicht von der alten Position gelöscht.<br />
Das heißt, ich sehe die Bewegungsspur der Bitmap. Oder muss ich noch sowas wie FillRect() verwenden?</p>
<pre><code class="language-cpp">PAINTSTRUCT ps;  
			HDC Bildhdc;

			Bildhdc = BeginPaint (hWnd, &amp;ps); 

			HDC Bufferhdc, Kugelhdc; 
			Bufferhdc = CreateCompatibleDC(Bildhdc);
			Kugelhdc = CreateCompatibleDC(Bildhdc);

			HBITMAP HBMP_OldBuffer = (HBITMAP) SelectObject(Bufferhdc, HBMP_Buffer);
			HBITMAP HBMP_OldKugel = (HBITMAP) SelectObject(Kugelhdc, HBMP_Kugel);

			TransparentBlt(Bufferhdc, X, Y, 16, 16, Kugelhdc, 0, 0, 16, 16, RGB(255,0,255));
			BitBlt(Bildhdc, 0, 0, 400, 350, Bufferhdc, 0, 0, SRCCOPY);

			SelectObject(Bildhdc, HBMP_OldBuffer); 
			SelectObject(Bildhdc, HBMP_OldKugel); 
			DeleteDC(Bufferhdc); 
			DeleteDC(Kugelhdc);

			EndPaint( hWnd, &amp;ps );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/681705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/681705</guid><dc:creator><![CDATA[Anfaenger Nr 5]]></dc:creator><pubDate>Mon, 27 Dec 2004 21:03:53 GMT</pubDate></item><item><title><![CDATA[Reply to Neuzeichnen vieler Bitmaps on Mon, 27 Dec 2004 21:34:19 GMT]]></title><description><![CDATA[<blockquote>
<p>Oder muss ich noch sowas wie FillRect() verwenden?</p>
</blockquote>
<p>Ja, du musst den gesammten Zeichnungsbereich clearen. Dann hast du aber ein neues Problem: Es flackert und verursacht Augenkrebs <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> . Ich empfehle aus eigener Erfahrung, einen Backbuffer zu verwenden, in den Du zeichnest. Dort kopierst du den Hintergrund und dann die Kugel rein. Nachher malst du den Backbuffer mit BitBlt auf den Haupt-HDC und clearst ihn dann. So flackerts nicht mehr. Hab mal ein kleines ping-pong geschrieben, dass die Grafikausgabe so realisierte... Auf ner 1.47GhZ Maschine hatte ich ca. 17fps :p .</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/681716</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/681716</guid><dc:creator><![CDATA[*phoenix* 0]]></dc:creator><pubDate>Mon, 27 Dec 2004 21:34:19 GMT</pubDate></item><item><title><![CDATA[Reply to Neuzeichnen vieler Bitmaps on Mon, 27 Dec 2004 21:47:17 GMT]]></title><description><![CDATA[<p>Ich habe mir noch einen neuen hdc als Backpuffer angelegt.<br />
Danach hab ich ein CreateCompatibleDC(Backbuffer) gemacht.</p>
<p>Wenn ich nun mit Bitblt da etwas rein kopiere, dann wird mir ja noch nichts angezeigt, muss ich den zusätzlich noch initialisieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/681719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/681719</guid><dc:creator><![CDATA[Anfaenger Nr 5]]></dc:creator><pubDate>Mon, 27 Dec 2004 21:47:17 GMT</pubDate></item><item><title><![CDATA[Reply to Neuzeichnen vieler Bitmaps on Mon, 27 Dec 2004 21:50:15 GMT]]></title><description><![CDATA[<p>Hmm... nein. Wenn du in den Backbuffer gemalt hast, musst du ihn selbst malen, also BitBlt mit dem wirklichen Ziel und dem Backbuffer als Source anwenden. Erst dann wird etwas angezeigt. Darum geht es doch...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/681721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/681721</guid><dc:creator><![CDATA[*phoenix* 0]]></dc:creator><pubDate>Mon, 27 Dec 2004 21:50:15 GMT</pubDate></item><item><title><![CDATA[Reply to Neuzeichnen vieler Bitmaps on Mon, 27 Dec 2004 22:14:24 GMT]]></title><description><![CDATA[<p>Ich habe diesen Teil jetzt so, ich kann das auch schwer erklären.<br />
Zumindest wird hier nichts angezeigt. Ich habe bestimmt was mit der Reihenfolge durcheinander gebracht.</p>
<p>[cpp]<br />
HBITMAP HBMP_OldBuffer = (HBITMAP) SelectObject(Bufferhdc, HBMP_Buffer);<br />
HBITMAP HBMP_OldKugel = (HBITMAP) SelectObject(Kugelhdc, HBMP_Kugel);</p>
<p>FillRect(myBufferhdc,&amp;rc,NULL);</p>
<p>BitBlt(myBufferhdc, 0, 0, 400, 350, Bufferhdc, 0, 0, SRCCOPY);<br />
TransparentBlt(myBufferhdc, X, Y, 16, 16, Kugelhdc, 0, 0, 16, 16, RGB(255,0,255));</p>
<p>BitBlt(Bildhdc, 0, 0, 400, 350, myBufferhdc, 0, 0, SRCCOPY);<br />
cpp]</p>
<p>Vielleicht ist auch ein Codeschnipsel für mich das beste, denn in der FAQ hab cih wirklich was ansprechendes gefunden</p>
]]></description><link>https://www.c-plusplus.net/forum/post/681730</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/681730</guid><dc:creator><![CDATA[Anfaenger Nr 5]]></dc:creator><pubDate>Mon, 27 Dec 2004 22:14:24 GMT</pubDate></item><item><title><![CDATA[Reply to Neuzeichnen vieler Bitmaps on Tue, 28 Dec 2004 00:00:03 GMT]]></title><description><![CDATA[<p>Sorry, aber du musst den Backbuffer auf den HDC deines Fensters malen. Wenn das nicht geht, kann ich dir nicht helfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/681758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/681758</guid><dc:creator><![CDATA[*phoenix* 0]]></dc:creator><pubDate>Tue, 28 Dec 2004 00:00:03 GMT</pubDate></item><item><title><![CDATA[Reply to Neuzeichnen vieler Bitmaps on Tue, 28 Dec 2004 21:31:12 GMT]]></title><description><![CDATA[<p>myBufferhdc = mein Backbuffer<br />
Bildhdc = Frontbuffer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/682266</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/682266</guid><dc:creator><![CDATA[Anfaenger Nr 5]]></dc:creator><pubDate>Tue, 28 Dec 2004 21:31:12 GMT</pubDate></item><item><title><![CDATA[Reply to Neuzeichnen vieler Bitmaps on Wed, 29 Dec 2004 00:32:29 GMT]]></title><description><![CDATA[<p>Wo blittest du denn die Hintergrundgrafik ?<br />
(oder ist das etwa HBMP_Buffer ? - Falls ja dann zeichnest du auf das Hintergrundbild, was du aber gar nichts willst ;D)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/682342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/682342</guid><dc:creator><![CDATA[geeky]]></dc:creator><pubDate>Wed, 29 Dec 2004 00:32:29 GMT</pubDate></item><item><title><![CDATA[Reply to Neuzeichnen vieler Bitmaps on Wed, 29 Dec 2004 21:38:55 GMT]]></title><description><![CDATA[<p>Eben, ich weiß nämlich nicht wie. Aber eine kleine Codezeile wäre ja deshalb nicht schlecht. Wenn ich wüsste, wie ich ein Buffer splitte, in den ich später was reinzeichne, dann hätte ich womöglich auch nicht dieses Problem. Vielleicht könnte mir ja mal jemand eine Codezeile vorgeben.<br />
Das ist eben dieser kleine Ruck, den ich brauche.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/682937</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/682937</guid><dc:creator><![CDATA[Anfaenger Nr 5]]></dc:creator><pubDate>Wed, 29 Dec 2004 21:38:55 GMT</pubDate></item><item><title><![CDATA[Reply to Neuzeichnen vieler Bitmaps on Thu, 30 Dec 2004 08:31:23 GMT]]></title><description><![CDATA[<p>Falls du noch Probleme mit DoubleBuffering ansich hast: <a href="http://c-plusplus.net/forum/viewtopic.php?t=14713" rel="nofollow">http://c-plusplus.net/forum/viewtopic.php?t=14713</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/683050</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/683050</guid><dc:creator><![CDATA[flenders]]></dc:creator><pubDate>Thu, 30 Dec 2004 08:31:23 GMT</pubDate></item><item><title><![CDATA[Reply to Neuzeichnen vieler Bitmaps on Thu, 30 Dec 2004 16:32:56 GMT]]></title><description><![CDATA[<p>Kann man eigentlich in einen HDC zeichnen, in den man vorher nichts reiselektiert hat? Also</p>
<p>HDC IrgendeinHDC, superHDC;</p>
<p>...<br />
IrgendeinHDC = CreateCombatibleBitmap(superHDC);<br />
BitBlt(IrgendeinHDC, 0, 0, 100, 100, usw. ...);<br />
...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/683289</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/683289</guid><dc:creator><![CDATA[Zuschauerlein]]></dc:creator><pubDate>Thu, 30 Dec 2004 16:32:56 GMT</pubDate></item><item><title><![CDATA[Reply to Neuzeichnen vieler Bitmaps on Thu, 30 Dec 2004 16:49:40 GMT]]></title><description><![CDATA[<p>Alsoo MOOOOOOOOOOOMENT</p>
<p>Jetzt komm ich mir veralbert vor.<br />
Was ist denn der Unterschied zwischen dem Code, den ich ganz am Anfang gepostet habe und dem Link von flenders.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/683306</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/683306</guid><dc:creator><![CDATA[Anfaenger Nr 5]]></dc:creator><pubDate>Thu, 30 Dec 2004 16:49:40 GMT</pubDate></item><item><title><![CDATA[Reply to Neuzeichnen vieler Bitmaps on Thu, 30 Dec 2004 16:54:03 GMT]]></title><description><![CDATA[<p>z.B. hast du nirgends CreateCompatibleBitmap stehen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/683310</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/683310</guid><dc:creator><![CDATA[flenders]]></dc:creator><pubDate>Thu, 30 Dec 2004 16:54:03 GMT</pubDate></item><item><title><![CDATA[Reply to Neuzeichnen vieler Bitmaps on Thu, 30 Dec 2004 17:26:59 GMT]]></title><description><![CDATA[<p>Vorgehensweise wäre diese:</p>
<p>Backbuffer erzeugen:<br />
o Mit CreateCompatibleDC() quasi die 1. 'Leinwand-Halterung' holen<br />
o Mit CreateCompatibleBitmap() quasi 'Papier' für die 1. Leinwand-Halterung holen<br />
o Mit SelectObject() das 'Papier' in die 1. 'Leinwand-Halterung einsetzen' und das alte 'Papier' das vorher drin war am besten irgendwohin legen...</p>
<p>Hintergrundbild zeichnen:<br />
o Mit CreateCompatibleDC() noch eine 'Leinwand-Halterung' holen<br />
o Ein fertiges Bild ('Papier' ;D) mit LoadBitmap(), LoadImage() oder sonstwas holen<br />
o Mit SelectObject() das fertige 'Bild' in die 2. 'Leinwand-Halterung' einsetzen und wieder das was vorher drin war irgendwie sichern<br />
o Jetzt einen Spezialisten holen, der geniale 1:1 Kopien hinkriegt: Mit BitBlt() das Bild in der 2. Leinwandhalterung auf das Bild in der 1. Leinwandhalterung kopieren lassen</p>
<p>Kugel zeichnen:<br />
o Mit CreateCompatibleDC() eine 3. 'Leinwand-Halterung' holen<br />
o Das fertiges Bild ('Papier' ;D) mit der Kugel via LoadBitmap(), LoadImage() oder sonstwas holen<br />
o Mit SelectObject() das fertige 'Bild' in die 3. 'Leinwand-Halterung' einsetzen und wieder das was vorher drin war irgendwie sichern<br />
o Jetzt einen Spezialisten holen, der geniale 1:1 Kopien mit Transparenz hinkriegt: Mit TransparentBlt() das Bild in der 2. Leinwandhalterung auf das Bild in der 1. Leinwandhalterung kopieren lassen</p>
<p>Das ganze darstellen:<br />
o Auf dem Papier in der 1. Leinwand ist jetzt das komplette Bild drin<br />
o Mit BitBlt() jetzt einfach eine 1:1 Kopie auf das Bild in der Leinwand des Fenster machen (BeginPaint() liefert uns ja die 'Leinwand' ;D)</p>
<p>...und aufräumen - jeweils für alle 3 erzeugten Leinwände:<br />
o Das Papier aus der Leinwandhalterung nehmen und das was vorher drin war wieder reinpacken (SelectObject())<br />
o Mit DeleteDC() die Leinwandhalterung wieder weg in den Keller packen<br />
o Mit DeleteObject() das voll-bemalte Papier (das mit CreateCompatibleBitmap() erzeugt) in die Mülltonne schmeißen.</p>
<p>------<br />
Das soll jetzt nur das Prinzip darstellen <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=";D"
      alt="😉"
    /><br />
Wenn man das ganze öfter zeichnet macht es natürlich keinen Sinn die Bilder jedesmal neu zu laden und die DCs und die Bitmap im Backbuffer-DC ständig zu erzeugen und dann wieder freizugeben.<br />
Stattdessen wird man die Bilder und den Backbuffer einmal bei WM_CREATE erzeugen/laden und bei WM_DESTROY freigeben. Den Backbuffer müsste man höchstens bei WM_SIZE in der Größe jeweils anpassen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/683329</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/683329</guid><dc:creator><![CDATA[geeky]]></dc:creator><pubDate>Thu, 30 Dec 2004 17:26:59 GMT</pubDate></item><item><title><![CDATA[Reply to Neuzeichnen vieler Bitmaps on Thu, 30 Dec 2004 17:51:22 GMT]]></title><description><![CDATA[<p>Wow, Danke Leute.</p>
<p>Endlich mal ein Ablaufplan, womit ich was Anfangen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/683335</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/683335</guid><dc:creator><![CDATA[Anfaenger Nr 5]]></dc:creator><pubDate>Thu, 30 Dec 2004 17:51:22 GMT</pubDate></item><item><title><![CDATA[Reply to Neuzeichnen vieler Bitmaps on Sat, 01 Jan 2005 18:19:10 GMT]]></title><description><![CDATA[<p>echt EDEL, geeky!<br />
-&gt; faq?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/684315</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/684315</guid><dc:creator><![CDATA[nate7]]></dc:creator><pubDate>Sat, 01 Jan 2005 18:19:10 GMT</pubDate></item><item><title><![CDATA[Reply to Neuzeichnen vieler Bitmaps on Thu, 20 Jan 2005 22:11:59 GMT]]></title><description><![CDATA[<p>geeky schrieb:</p>
<blockquote>
<p>Stattdessen wird man die Bilder und den Backbuffer einmal bei WM_CREATE erzeugen/laden und bei WM_DESTROY freigeben. Den Backbuffer müsste man höchstens bei WM_SIZE in der Größe jeweils anpassen...</p>
</blockquote>
<p>bei WM_CREATE funktioniert</p>
<pre><code>HDC hdcBack = CreateCompatibleDC(hcd);
</code></pre>
<p>ja noch nicht, weil hdc = BeginPaint()ist, also erst in WM_PAINT erstellt wird.</p>
<p>wie erstellt man also den backBuffer?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/701947</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/701947</guid><dc:creator><![CDATA[nate7]]></dc:creator><pubDate>Thu, 20 Jan 2005 22:11:59 GMT</pubDate></item><item><title><![CDATA[Reply to Neuzeichnen vieler Bitmaps on Thu, 20 Jan 2005 23:20:37 GMT]]></title><description><![CDATA[<p>CreateCompatibleDC(NULL);<br />
...damit erzeugst du einen DC der zum Desktop-DC kompatibel ist <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=";D"
      alt="😉"
    /><br />
(oder via GetDC() einfach das Fenster-DC holen...)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/701982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/701982</guid><dc:creator><![CDATA[geeky]]></dc:creator><pubDate>Thu, 20 Jan 2005 23:20:37 GMT</pubDate></item></channel></rss>