<?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[Bitmaps mit GDI werden nicht richtig gezeichnet!]]></title><description><![CDATA[<p>Hallo!</p>
<p>Mein Programm soll ein Raster von 16*16 Quadraten mit aus Dateien geladenen Bitmaps füllen (1Kästchen = 1 Bitmap). Leider wird aber nur ein kleiner Teil des Rasters gefüllt. Das ganze hat auch eine seltsame Form (gleicht der Rundung der Fenster in XP).</p>
<p>Das ganze funktioniert folgendermaßen:</p>
<pre><code class="language-cpp">Filehandler fhImages;
		HBITMAP* Images;

		string envApps= (string)getenv(&quot;APPDATA&quot;);
		Images = fhImages.GetImages(envApps+FDIR_TEMPDIR);

		int arrIndex=0;
		int x=0;
		int y=0;
		int row= 16;

		while(arrIndex &lt;= 255)
		{
			HDC hdcMemory= CreateCompatibleDC(hdc);
			SelectObject(hdcMemory,Images[arrIndex]);
			BitBlt(hdc,x,y,64,64,hdcMemory,0,0,SRCCOPY);
			arrIndex++;
			x+=64;
			row--;
			if(row ==0)
			{
				x=0;
				y+=64;
				row=16;
			}
		}
</code></pre>
<p>Die Bilder werden alle geladen und dann der Reihe nach &quot;geblittet&quot;.</p>
<p>Weiß jemand, wie sowas zu Stande kommt?</p>
<p>Vielen Dank schon mal im Voraus,<br />
veryxRV</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/181992/bitmaps-mit-gdi-werden-nicht-richtig-gezeichnet</link><generator>RSS for Node</generator><lastBuildDate>Tue, 07 Jul 2026 18:41:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/181992.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 19 May 2007 22:33:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Bitmaps mit GDI werden nicht richtig gezeichnet! on Sun, 20 May 2007 17:24:40 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Mein Programm soll ein Raster von 16*16 Quadraten mit aus Dateien geladenen Bitmaps füllen (1Kästchen = 1 Bitmap). Leider wird aber nur ein kleiner Teil des Rasters gefüllt. Das ganze hat auch eine seltsame Form (gleicht der Rundung der Fenster in XP).</p>
<p>Das ganze funktioniert folgendermaßen:</p>
<pre><code class="language-cpp">Filehandler fhImages;
		HBITMAP* Images;

		string envApps= (string)getenv(&quot;APPDATA&quot;);
		Images = fhImages.GetImages(envApps+FDIR_TEMPDIR);

		int arrIndex=0;
		int x=0;
		int y=0;
		int row= 16;

		while(arrIndex &lt;= 255)
		{
			HDC hdcMemory= CreateCompatibleDC(hdc);
			SelectObject(hdcMemory,Images[arrIndex]);
			BitBlt(hdc,x,y,64,64,hdcMemory,0,0,SRCCOPY);
			arrIndex++;
			x+=64;
			row--;
			if(row ==0)
			{
				x=0;
				y+=64;
				row=16;
			}
		}
</code></pre>
<p>Die Bilder werden alle geladen und dann der Reihe nach &quot;geblittet&quot;.</p>
<p>Weiß jemand, wie sowas zu Stande kommt?</p>
<p>Vielen Dank schon mal im Voraus,<br />
veryxRV</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1288230</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1288230</guid><dc:creator><![CDATA[veryxRV]]></dc:creator><pubDate>Sun, 20 May 2007 17:24:40 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmaps mit GDI werden nicht richtig gezeichnet! on Sun, 20 May 2007 11:28:56 GMT]]></title><description><![CDATA[<p>Ich habe jetzt herausgefunden, dass anscheinend nur der Bereich richtig mit der GDI ausgabe gefüllt wird, der vorher von einem Dialogfeld bedeckt wurde, deswegen auch die Fensterform.</p>
<p>Kann mir als jemand sagen, wie ich es anstellen kann, dass der gesamte Fensterereich damit gefüllt wird?</p>
<p>Zur Info: Der Zeichencode befindet sich in einer Funktion, die bei WM_PAINT aufgerufen wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1288377</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1288377</guid><dc:creator><![CDATA[veryxRV]]></dc:creator><pubDate>Sun, 20 May 2007 11:28:56 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmaps mit GDI werden nicht richtig gezeichnet! on Sun, 20 May 2007 17:14:48 GMT]]></title><description><![CDATA[<p>Gib mal &quot;hdcMemory&quot; nach &quot;BitBlt ()&quot; mit &quot;DeleteDC ()&quot; wieder frei. Sonst benimmt sich das BS seltsam.<br />
<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/1288588</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1288588</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 20 May 2007 17:14:48 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmaps mit GDI werden nicht richtig gezeichnet! on Sun, 20 May 2007 18:54:09 GMT]]></title><description><![CDATA[<p>Danke, war aber Leider nicht die Lösung. InvalidateRect hat aber abhilfe geschafft, da es damit das gesamte Fenster neu Zeichnet, anstatt nur den Bereich, denn die DialogBox vorher bedeckt hatte.</p>
<p>Leider habe ich jetzt ein anderes Problem:</p>
<p>Hier ein Screenshot:</p>
<p><a href="http://owmod.gamondo.de/gdifehler.jpg" rel="nofollow">http://owmod.gamondo.de/gdifehler.jpg</a></p>
<p>Wie auf dem Screeny unschwer zu erkennen ist, lässr er die letzten 11 Bitmaps einfach aus. Woran könnte das denn liegen?</p>
<p>EDIT: Auf dem Bild ist ja außer den Normalen Quadraten ein kleines Rechteck zu sehen, da da irgendwie nicht hingehört. Wenn man es ganauer betrachtet, sieht man, dass es sich dabei um eine Reihe von Symbolen handelt, die normalerweise die kleinen Buttons für &quot;Minimieren&quot; etc. beim Fenster darstellen. Diese sind übrigens immer verschieden, also mal das X, dann der - usw. Scheint also, als ob sich der Zeichencode für die Bilder mit dem vom Fenster überschneiden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1288596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1288596</guid><dc:creator><![CDATA[veryxRV]]></dc:creator><pubDate>Sun, 20 May 2007 18:54:09 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmaps mit GDI werden nicht richtig gezeichnet! on Sun, 20 May 2007 19:22:11 GMT]]></title><description><![CDATA[<p>Probier mal ob bei nur einer Bitmap alles korrekt gezeichnet wird :</p>
<pre><code class="language-cpp">// SelectObject(hdcMemory,Images[arrIndex]);
SelectObject(hdcMemory,Images[0]);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1288685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1288685</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 20 May 2007 19:22:11 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmaps mit GDI werden nicht richtig gezeichnet! on Sun, 20 May 2007 19:26:39 GMT]]></title><description><![CDATA[<p>Ja wird es. Habe den Fehler auch gefunden, kann ihn mir nur nicht wirklich begründen, aber vielleicht kann das hier ja jemand:</p>
<p>Mein BITMAP Array war 256 Einträge groß, das ist genau so viel, wie die Bilder, die gezeichnet werden sollen. Erweiter ich diese 256 jetzt um 11, also genau so viele Bilder, wie vorher ausgelassen wurden, stellt er alles richtig dar. Der Speicher hat also irgendwie nicht gereicht, aber wieso werden genau 11 mehr benötigt?</p>
<p>Wär super, wenn mir das hier jemand erklären könnte!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1288689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1288689</guid><dc:creator><![CDATA[veryxRV]]></dc:creator><pubDate>Sun, 20 May 2007 19:26:39 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmaps mit GDI werden nicht richtig gezeichnet! on Sun, 20 May 2007 19:27:59 GMT]]></title><description><![CDATA[<p>Du solltest bei SelectObject() den Rückgabewert merken und nach Benutzung des rein-selektierten Objekts wieder das ursprüngliche Objekt (der vorher gemerkte Rückgabewert) rein-selektieren - auch wenn das DC nachher eh gelöscht wird.<br />
Außerdem zu jedem CreateCompatibleDC() auch ein DeleteDC().<br />
Ansonsten hast du GDI-Leaks und da passieren dann die lustigsten Sachen <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/1288693</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1288693</guid><dc:creator><![CDATA[geeky]]></dc:creator><pubDate>Sun, 20 May 2007 19:27:59 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmaps mit GDI werden nicht richtig gezeichnet! on Sun, 20 May 2007 19:31:32 GMT]]></title><description><![CDATA[<p>geeky schrieb:</p>
<blockquote>
<p>Du solltest bei SelectObject() den Rückgabewert merken und nach Benutzung des rein-selektierten Objekts wieder das ursprüngliche Objekt (der vorher gemerkte Rückgabewert) rein-selektieren - auch wenn das DC nachher eh gelöscht wird.<br />
Außerdem zu jedem CreateCompatibleDC() auch ein DeleteDC().<br />
Ansonsten hast du GDI-Leaks und da passieren dann die lustigsten Sachen <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>
</blockquote>
<p>Hmm.. Sorry aber hab ich nicht ganz verstanden ^^. Kannst du mir mal bitte ein Codebeispiel nennen? Wäre nett!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1288696</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1288696</guid><dc:creator><![CDATA[veryxRV]]></dc:creator><pubDate>Sun, 20 May 2007 19:31:32 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmaps mit GDI werden nicht richtig gezeichnet! on Sun, 20 May 2007 19:57:27 GMT]]></title><description><![CDATA[<p>Wird die letzte Bitmap im Array auch korrekt gezeichnet ?</p>
<pre><code class="language-cpp">// SelectObject(hdcMemory,Images[arrIndex]);
SelectObject(hdcMemory,Images[255]);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1288711</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1288711</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 20 May 2007 19:57:27 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmaps mit GDI werden nicht richtig gezeichnet! on Sun, 20 May 2007 19:58:19 GMT]]></title><description><![CDATA[<p>Jep, wird sie.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1288712</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1288712</guid><dc:creator><![CDATA[veryxRV]]></dc:creator><pubDate>Sun, 20 May 2007 19:58:19 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmaps mit GDI werden nicht richtig gezeichnet! on Sun, 20 May 2007 20:01:15 GMT]]></title><description><![CDATA[<p>Hast Du jetzt nur das Bitmap-Array von 256 auf 256 + 11 Elemente vergrössert ?<br />
Die angehängten Elemente werden durch den Zähler doch gar nicht erreicht ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1288714</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1288714</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 20 May 2007 20:01:15 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmaps mit GDI werden nicht richtig gezeichnet! on Sun, 20 May 2007 20:13:50 GMT]]></title><description><![CDATA[<p>Ja habe ich. Eben das wundert mich auch, aber es hat das Problem gelöst. Wahrscheinlich weil dadurch mehr Speicher reserviert wurde. Weiß der Geier wofür...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1288724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1288724</guid><dc:creator><![CDATA[veryxRV]]></dc:creator><pubDate>Sun, 20 May 2007 20:13:50 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmaps mit GDI werden nicht richtig gezeichnet! on Sun, 20 May 2007 20:25:48 GMT]]></title><description><![CDATA[<p>Was ich meine ist:</p>
<pre><code class="language-cpp">while(arrIndex &lt;= 255)
{
	HDC hdcMemory = CreateCompatibleDC(hdc);
	HGDIOBJ oldObj = SelectObject(hdcMemory,Images[arrIndex]);	// CreateCompatibleDC() erzeugt eine 1x1 Bitmap und selektiert diese rein, diese haben wir nun in oldObj
		BitBlt(hdc,x,y,64,64,hdcMemory,0,0,SRCCOPY);
	SelectObject(hdcMemory,oldObj);	// Jetzt wieder das oldObj rein-klatschen. Rückgabewert von SelectObject() wäre diesmal Images[arrIndex]
	DeleteDC(hdcMemory);	// Löscht hdcMemory und die 1x1 Bitmap

	// ...etc
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1288730</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1288730</guid><dc:creator><![CDATA[geeky]]></dc:creator><pubDate>Sun, 20 May 2007 20:25:48 GMT</pubDate></item></channel></rss>