<?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[Memory DC - Problem mit logischen Koordinaten]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe das Problem, das mein Memory-DC in der OnDraw() Methode nach einem BitBlt als kleiner schwarzer Kasten im Fenster erscheint. Das Problem muss an meinem logischen Koordinatensystem liegen und das ich (vielleicht) die Größe der Bitmap für den memDC nicht richtig einstelle...</p>
<p>Hier der Code der OnPrepareDC() Methode:</p>
<pre><code class="language-cpp">// Logische Abbildung definieren
pDC-&gt;SetMapMode(MM_ISOTROPIC);
CSize oldWndExt = pDC-&gt;SetWindowExt(30000,-30000);
pDC-&gt;SetWindowOrg(-15000,15000);
// Geräteabhängige Abbildung definieren
CRect clientRect;
GetClientRect(clientRect);
CSize oldViewExt = pDC-&gt;SetViewportExt(clientRect.right,clientRect.bottom);
pDC-&gt;SetViewportOrg(0,0);
</code></pre>
<p>In der OnDraw() Methode möchte ich nun den MemoryDC nutzen, um die Grafikausgabe double-buffered durchzuführen. Hier der Code:</p>
<pre><code class="language-cpp">CDC memDC;
memDC.CreateCompatibleDC(pDC);

CBitmap memBMP;

// Hier liegt das Problem: Wie bekomme ich die korrekte Größe?
CSize viewExt = pDC-&gt;GetViewportExt(); 
VERIFY(memBMP.CreateCompatibleBitmap(pDC, viewExt.cx, viewExt.cy) == TRUE);

memDC.SelectObject(memBMP);

// ... zeichnen

pDC-&gt;BitBlt(0,0,viewExt.cx,viewExt.cy,&amp;memDC,0,0,SRCCOPY);
memDC.DeleteDC();
</code></pre>
<p>Ich habe bereits mit GetViewportExt, GetWindowExt und GetClientRect herumprobiert und jeweils die entsprechenden Koordinaten in CreateCompatibleBitmap ausprobiert. Das Ergebnis ist jedesmal ein kleiner, schwarzer Kasten, der sich bei den drei Methoden lediglich leicht in der Größe unterscheidet.</p>
<p>Würde mich über Hinweise freuen!</p>
<p>Gruß<br />
Prog</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/49217/memory-dc-problem-mit-logischen-koordinaten</link><generator>RSS for Node</generator><lastBuildDate>Wed, 29 Apr 2026 04:25:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/49217.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 17 Sep 2003 08:47:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Memory DC - Problem mit logischen Koordinaten on Wed, 17 Sep 2003 08:47:28 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe das Problem, das mein Memory-DC in der OnDraw() Methode nach einem BitBlt als kleiner schwarzer Kasten im Fenster erscheint. Das Problem muss an meinem logischen Koordinatensystem liegen und das ich (vielleicht) die Größe der Bitmap für den memDC nicht richtig einstelle...</p>
<p>Hier der Code der OnPrepareDC() Methode:</p>
<pre><code class="language-cpp">// Logische Abbildung definieren
pDC-&gt;SetMapMode(MM_ISOTROPIC);
CSize oldWndExt = pDC-&gt;SetWindowExt(30000,-30000);
pDC-&gt;SetWindowOrg(-15000,15000);
// Geräteabhängige Abbildung definieren
CRect clientRect;
GetClientRect(clientRect);
CSize oldViewExt = pDC-&gt;SetViewportExt(clientRect.right,clientRect.bottom);
pDC-&gt;SetViewportOrg(0,0);
</code></pre>
<p>In der OnDraw() Methode möchte ich nun den MemoryDC nutzen, um die Grafikausgabe double-buffered durchzuführen. Hier der Code:</p>
<pre><code class="language-cpp">CDC memDC;
memDC.CreateCompatibleDC(pDC);

CBitmap memBMP;

// Hier liegt das Problem: Wie bekomme ich die korrekte Größe?
CSize viewExt = pDC-&gt;GetViewportExt(); 
VERIFY(memBMP.CreateCompatibleBitmap(pDC, viewExt.cx, viewExt.cy) == TRUE);

memDC.SelectObject(memBMP);

// ... zeichnen

pDC-&gt;BitBlt(0,0,viewExt.cx,viewExt.cy,&amp;memDC,0,0,SRCCOPY);
memDC.DeleteDC();
</code></pre>
<p>Ich habe bereits mit GetViewportExt, GetWindowExt und GetClientRect herumprobiert und jeweils die entsprechenden Koordinaten in CreateCompatibleBitmap ausprobiert. Das Ergebnis ist jedesmal ein kleiner, schwarzer Kasten, der sich bei den drei Methoden lediglich leicht in der Größe unterscheidet.</p>
<p>Würde mich über Hinweise freuen!</p>
<p>Gruß<br />
Prog</p>
]]></description><link>https://www.c-plusplus.net/forum/post/355131</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/355131</guid><dc:creator><![CDATA[ProgRulez]]></dc:creator><pubDate>Wed, 17 Sep 2003 08:47:28 GMT</pubDate></item><item><title><![CDATA[Reply to Memory DC - Problem mit logischen Koordinaten on Wed, 17 Sep 2003 13:21:52 GMT]]></title><description><![CDATA[<p>Hat keiner eine Idee, was hier falsch läuft?</p>
<p>Ich bin nämlich am Rande der Verzweiflung. Hatte vor ein Paar Tagen mal versucht einen memory DC mit der Win32-API und GDI zu erzeugen. Da lief alles problemlos...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/355379</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/355379</guid><dc:creator><![CDATA[ProgRulez]]></dc:creator><pubDate>Wed, 17 Sep 2003 13:21:52 GMT</pubDate></item></channel></rss>