<?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[Problem mit BitBlt]]></title><description><![CDATA[<p>Hi!<br />
Ich möchte einen Scrollenden Text über den Bildschirm laufen lassen. Dazu will ich einen DC für die Buchstaben machen den ich jedesmal um einen Pixel verschiebe. Wenn wieder genug platz ist, wird der nächste Buchstabe drüber geblittet. Den DC möchte ich dann auf den DC des Fensters Blitten, aber das geht nicht. Beispiel:</p>
<pre><code>...
	HDC hFontDC = CreateCompatibleDC(hdc); // Backbuffer DC wo der komplette Scrolltext draufliegt

	//Laufband funktion
	int iDelay = 0; //32 Pixel Warten bevor nächster Buchstabe geblittet wird
	int iBuchstabePtr = 0; //Nächster Buchstabe der geblittet wird.

	ZeichneBuchstabe(hFontDC, Text[iBuchstabePtr], 0, 0); 

	//Ab auf den Frontbuffer damit
	BitBlt(hdc, 0, 0, 32, 32, hFontDC, 32, 32, SRCCOPY);

	DeleteDC(hFontDC);
...
</code></pre>
<p>Wenn ich das mache, kommt nix. Blitte ich aber Direkt mit ZeichneBuchstabe() auf den hdc und nicht auf den hFontDC , sieht man einen Buchstaben.</p>
<p>Was mache ich falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/154249/problem-mit-bitblt</link><generator>RSS for Node</generator><lastBuildDate>Thu, 23 Jul 2026 19:20:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/154249.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 25 Jul 2006 16:13:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit BitBlt on Tue, 25 Jul 2006 16:13:10 GMT]]></title><description><![CDATA[<p>Hi!<br />
Ich möchte einen Scrollenden Text über den Bildschirm laufen lassen. Dazu will ich einen DC für die Buchstaben machen den ich jedesmal um einen Pixel verschiebe. Wenn wieder genug platz ist, wird der nächste Buchstabe drüber geblittet. Den DC möchte ich dann auf den DC des Fensters Blitten, aber das geht nicht. Beispiel:</p>
<pre><code>...
	HDC hFontDC = CreateCompatibleDC(hdc); // Backbuffer DC wo der komplette Scrolltext draufliegt

	//Laufband funktion
	int iDelay = 0; //32 Pixel Warten bevor nächster Buchstabe geblittet wird
	int iBuchstabePtr = 0; //Nächster Buchstabe der geblittet wird.

	ZeichneBuchstabe(hFontDC, Text[iBuchstabePtr], 0, 0); 

	//Ab auf den Frontbuffer damit
	BitBlt(hdc, 0, 0, 32, 32, hFontDC, 32, 32, SRCCOPY);

	DeleteDC(hFontDC);
...
</code></pre>
<p>Wenn ich das mache, kommt nix. Blitte ich aber Direkt mit ZeichneBuchstabe() auf den hdc und nicht auf den hFontDC , sieht man einen Buchstaben.</p>
<p>Was mache ich falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1103972</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1103972</guid><dc:creator><![CDATA[Perner]]></dc:creator><pubDate>Tue, 25 Jul 2006 16:13:10 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit BitBlt on Tue, 25 Jul 2006 16:35:41 GMT]]></title><description><![CDATA[<p>Du musst in hFontDC noch ne Bitmap selektieren!<br />
Sonst gehen die Zeichenoperationen die auf hFontDC angewandt werden quasi ins leere <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1103980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1103980</guid><dc:creator><![CDATA[geeky]]></dc:creator><pubDate>Tue, 25 Jul 2006 16:35:41 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit BitBlt on Tue, 25 Jul 2006 17:05:36 GMT]]></title><description><![CDATA[<p>Genau das blicke ich nicht durch. Was hat es denn jetzt mit dem SelectObject auf sich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1104003</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1104003</guid><dc:creator><![CDATA[Perner]]></dc:creator><pubDate>Tue, 25 Jul 2006 17:05:36 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit BitBlt on Tue, 25 Jul 2006 17:09:54 GMT]]></title><description><![CDATA[<p>So irgendwie?</p>
<pre><code>HDC hFontDC = CreateCompatibleDC(hdc); // Backbuffer DC wo der komplette Scrolltext draufliegt
HBITMAP hbmFont = CreateCompatibleBitmap(hdc, 300, 50);

//Laufband funktion
int iDelay = 0; //32 Pixel Warten bevor nächster Buchstabe geblittet wird
int iBuchstabePtr = 0; //Nächster Buchstabe der geblittet wird.

SelectObject(hFontDC, hbmFont);
ZeichneBuchstabe(hFontDC, Text[iBuchstabePtr], 0, 0); 

//Ab auf den Frontbuffer damit
BitBlt(hdc, 0, 0, 32, 32, hFontDC, 32, 32, SRCCOPY);

DeleteDC(hFontDC);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1104006</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1104006</guid><dc:creator><![CDATA[Perner]]></dc:creator><pubDate>Tue, 25 Jul 2006 17:09:54 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit BitBlt on Tue, 25 Jul 2006 17:17:07 GMT]]></title><description><![CDATA[<p>So gehts (nicht getestet):</p>
<pre><code class="language-cpp">// ...
	HDC hFontDC = CreateCompatibleDC(hdc); // Backbuffer DC wo der komplette Scrolltext draufliegt
	HBITMAP hbmpPrevBits; // alte Bitmap des Speicherkontextes hFontDC
	RECT rcClient; // Client-Bereich
	GetClientRect(hWnd, &amp;rcClient); // hWnd ist das Fenster auf das gezeichnet werden soll
	// Bitmap in den Kontext einsetzen; alte Bitmap sichern:
	hbmpPrevBits = reinterpret_cast&lt;HBITMAP&gt;(SelectObject(hFontDC, CreateCompatibleBitmap(hdc, rcClient.right, rcClient.bottom)));

	//Laufband funktion
	int iDelay = 0; //32 Pixel Warten bevor nächster Buchstabe geblittet wird
	int iBuchstabePtr = 0; //Nächster Buchstabe der geblittet wird.

	ZeichneBuchstabe(hFontDC, Text[iBuchstabePtr], 0, 0); 

	//Ab auf den Frontbuffer damit
	BitBlt(hdc, 0, 0, 32, 32, hFontDC, 32, 32, SRCCOPY);

	// alte Bitmap wieder einsetzen und Hintergrundbitmap (Puffer) löschen bzw freigeben:
	DeleteObject(SelectObject(hFontDC, hbmpPrevBits);
	DeleteDC(hFontDC);
// ...
</code></pre>
<p>Habs auch kommentiert <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1104009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1104009</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Tue, 25 Jul 2006 17:17:07 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit BitBlt on Tue, 25 Jul 2006 17:47:19 GMT]]></title><description><![CDATA[<p>wofür ist das hbmpPrevBits? Welches Bitmap sichert man da und warum?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1104035</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1104035</guid><dc:creator><![CDATA[Perner]]></dc:creator><pubDate>Tue, 25 Jul 2006 17:47:19 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit BitBlt on Tue, 25 Jul 2006 17:53:46 GMT]]></title><description><![CDATA[<p>Perner schrieb:</p>
<blockquote>
<p>wofür ist das hbmpPrevBits? Welches Bitmap sichert man da und warum?</p>
</blockquote>
<p>Naja man setzt in den Kontext ja ein GDI-Objekt ein...und alles was an GDI-Objekten in einem DC 'verschwindet', muss auch wieder rückgängig gemacht werden.</p>
<p>Siehe MSDN:</p>
<p>MSDN zu SelectObject(...) schrieb:</p>
<blockquote>
<p>This function returns the previously selected object of the specified type. An application should always replace a new object with the original, default object after it has finished drawing with the new object.</p>
</blockquote>
<p>Ist also von M$ vorgeschrieben. In hbmpPrevBits wird also die Bitmap gespeichert (besser ein Handle darauf), die sich vorm Einsetzen unser Puffer-Bitmap im Speicherkontext hFontDC befindet.</p>
<p>Hoffe das war verständlich. <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>EDIT: Vertipper <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1104041</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1104041</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Tue, 25 Jul 2006 17:53:46 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit BitBlt on Tue, 25 Jul 2006 18:40:28 GMT]]></title><description><![CDATA[<p>Also verhällt sich das so ähnlich wie bei PUSH und POP bei assembler, richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1104077</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1104077</guid><dc:creator><![CDATA[Perner]]></dc:creator><pubDate>Tue, 25 Jul 2006 18:40:28 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit BitBlt on Tue, 25 Jul 2006 18:50:47 GMT]]></title><description><![CDATA[<p>Wenn du mir PUSH und POP erklärst, kann ich dir darauf ne Antwort geben...kann kein Assem. :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1104087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1104087</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Tue, 25 Jul 2006 18:50:47 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit BitBlt on Tue, 25 Jul 2006 19:22:02 GMT]]></title><description><![CDATA[<p>Servus CodeFinder!</p>
<p>Hab' grad keine Ahnung, worums bei euch geht, aber</p>
<p>PUSH legt einen Wert auf den Stack,<br />
POP holt ihn wieder ab.</p>
<p>Greetz, Swordfish</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1104118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1104118</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Tue, 25 Jul 2006 19:22:02 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit BitBlt on Tue, 25 Jul 2006 19:41:32 GMT]]></title><description><![CDATA[<p>Hi Sworty <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>Jo, Danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>Kannst du Assembler ?</p>
<p>EDIT: Kannst mir mal eben sagen, wie die Textfarbe eines deaktivierten Editfeld ändere ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1104139</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1104139</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Tue, 25 Jul 2006 19:41:32 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit BitBlt on Tue, 25 Jul 2006 21:12:25 GMT]]></title><description><![CDATA[<p>Laut msdn erzeugt CreateCompatibleDC() ein DC, in das eine 1x1 Pixel große Monochrom-Bitmap reinselektiert ist, die bei DestroyDC() mitgelöscht wird, sofern man sie vorher wieder zurückselektiert hat <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="😉"
    /></p>
<p>Da ne 1x1 Pixel große Monochrom-Bitmap nicht unbedingt hilfreich ist muss man vorher ne passende reinselektieren und anschließend wieder die ursprüngliche reinhauen <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="😉"
    /></p>
<p>Wesentlich komfortabler kann man mit GDI+ werkeln<br />
(Nachteil: Es ist etwas langsamer und es gibt Unterschiede beim Text rendern zwischen GDI+ und GDI, Vorteil: Alpha-Channel, Graphics.DrawString(), Graphics.DrawImage(), Speichern von bmp, jpg, gif, png, und generell nicht das lästige hantieren mit SelectObject() und CreateCompatibleDC() etc...)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1104200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1104200</guid><dc:creator><![CDATA[geeky]]></dc:creator><pubDate>Tue, 25 Jul 2006 21:12:25 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit BitBlt on Wed, 26 Jul 2006 12:17:08 GMT]]></title><description><![CDATA[<p>CodeFinder schrieb:</p>
<blockquote>
<p>Hi Sworty <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>
</blockquote>
<p>Hi Cody <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>Jo, Danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>CodeFinder schrieb:</p>
<blockquote>
<p>Kannst du Assembler?</p>
</blockquote>
<p>Ja.</p>
<p>CodeFinder schrieb:</p>
<blockquote>
<p>Kannst mir mal eben sagen, wie die Textfarbe eines deaktivierten Editfeld ändere ?</p>
</blockquote>
<p>Nö, ich hab' mich mit der WinAPI noch nie soweit beschäftigt, das ich auf jede Frage eine Antwort wüsste. Wenn ich was brauch durchforste ich die lokal installierte MSDN. Sorry.</p>
<p>Greetz, Swordfish</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1104548</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1104548</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Wed, 26 Jul 2006 12:17:08 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit BitBlt on Wed, 26 Jul 2006 14:57:28 GMT]]></title><description><![CDATA[<p>Swordfish schrieb:</p>
<blockquote>
<p>Nö, ich hab' mich mit der WinAPI noch nie soweit beschäftigt, das ich auf jede Frage eine Antwort wüsste. Wenn ich was brauch durchforste ich die lokal installierte MSDN. Sorry.<br />
Greetz, Swordfish</p>
</blockquote>
<p>Jo nit schlimm, bin zum Schluss gekommen, das es nit geht, habs schon (zwangläufig :p ) anders gelößt. Trotzdem th<strong>X</strong></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1104691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1104691</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Wed, 26 Jul 2006 14:57:28 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit BitBlt on Thu, 27 Jul 2006 13:57:52 GMT]]></title><description><![CDATA[<p>Ah danke, ich glaube ich habs jetzt. Der gerätekontext ist also eine art Zeiger, der auf ein Bitmap zeigt. Wenn ich BitBlt mache wird dieses Bitmap worauf der Gerätekontext zeigt ausgelesen/beschrieben, richtig?</p>
<p>Bei mir funktioniert es auf jedenfall jetzt. <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1105420</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1105420</guid><dc:creator><![CDATA[Perner]]></dc:creator><pubDate>Thu, 27 Jul 2006 13:57:52 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit BitBlt on Thu, 27 Jul 2006 17:05:16 GMT]]></title><description><![CDATA[<p>Also ein Handle (also auch HDC - <strong>H</strong>andle to a <strong>D</strong>evice <strong>C</strong>ontext) ist eigentlich immer ein Zeiger auf einen Speicherbereich, der dann je nach Typ es Handles entsprechend interpretiert wird...</p>
<p>Beispiel:<br />
HWND - <strong>H</strong>andle to a <strong>W</strong>i<strong>ND</strong>ow<br />
Hier hast du einen Pointer auf einen Speicherbereich, der Informationen über ein Fenster 'enthält'. Glaube intern arbeiten die dann sogar mit Strukturen (must dir mal die Definition des Makros DECLARE_HANDLE() angucken, mit welchem die Handle der Win32API deklariert wurden.).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1105561</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1105561</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Thu, 27 Jul 2006 17:05:16 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit BitBlt on Tue, 01 Aug 2006 08:15:50 GMT]]></title><description><![CDATA[<p>Mal angenommen, ich selecte so einen DC nicht zurück, sondern schreibe bloß:</p>
<pre><code class="language-cpp">HBITMAP bitmap=CreateCompatibleBitmap (hDC, 20, 20);
HDC dc=CreateCompatibleDC (hDC);

SelectObject (dc, bitmap);

//...

DeleteDC (dc);
DeleteObject (bitmap);
</code></pre>
<p>Ohne den Ursprungszustand des DCs abzufangen. Gibt es dann tatsächliche Probleme? Kommt es zu Memory Leaks oder ist das Abfangen des alten Zustands bloß so eine Art eingebürgerter Standard, der aber ansonsten keine Auswirkungen hat?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1108233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1108233</guid><dc:creator><![CDATA[NES-Spieler]]></dc:creator><pubDate>Tue, 01 Aug 2006 08:15:50 GMT</pubDate></item></channel></rss>