<?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[Screenshot auf das Fenster zeichnen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab folgenden Code um einen Screenshot auf das Fenster zu zeichnen:<br />
<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="➡"
    /> WM_COMMAND</p>
<pre><code class="language-cpp">...
SourceDC = GetWindowDC(hwnd);
DestDC = CreateCompatibleDC(SourceDC);
hBitmap = CreateCompatibleBitmap (SourceDC, 100, 100);
SelectObject(DestDC, hBitmap);
BitBlt(DestDC,0,0,100,100,SourceDC,0,0,SRCCOPY); 
DeleteDC(SourceDC);                    
DeleteDC(DestDC);
...
</code></pre>
<p><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="➡"
    /> WM_PAINT</p>
<pre><code class="language-cpp">...
hdcMem = CreateCompatibleDC (hdc) ; 
SelectObject (hdcMem, hBitmap) ; 
BitBlt (hdc, 100, 100, 100, 100, hdcMem, 0, 0, SRCCOPY) ;
...
</code></pre>
<p>Ich will es so in einem Bitmap speichern, da wenn ich es ja in WM_COMMAND direkt zeichnen würde, bei einem Aufruf von WM_SIZE bzw. WM_PAINT verschwinden würde.</p>
<p>Das Problem an meinem Code ist, dass nichts nach einem Klick auf den Button gezeichnet wird. Wenn ich das ganze ohne Bitmap und in WM_COMMAND direkt mache geht es, bloß beim Neuzeichnen verschwindet es.</p>
<p>Wie kann ich es am besten in WM_COMMAND zwischenspeichern und dann bei WM_PAINT zeichnen? Und was mache ich bei dem obigen Code falsch?</p>
<p>MfG, Michael</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/214560/screenshot-auf-das-fenster-zeichnen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Apr 2026 02:59:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/214560.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 30 May 2008 19:18:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Screenshot auf das Fenster zeichnen on Fri, 30 May 2008 19:19:01 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab folgenden Code um einen Screenshot auf das Fenster zu zeichnen:<br />
<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="➡"
    /> WM_COMMAND</p>
<pre><code class="language-cpp">...
SourceDC = GetWindowDC(hwnd);
DestDC = CreateCompatibleDC(SourceDC);
hBitmap = CreateCompatibleBitmap (SourceDC, 100, 100);
SelectObject(DestDC, hBitmap);
BitBlt(DestDC,0,0,100,100,SourceDC,0,0,SRCCOPY); 
DeleteDC(SourceDC);                    
DeleteDC(DestDC);
...
</code></pre>
<p><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="➡"
    /> WM_PAINT</p>
<pre><code class="language-cpp">...
hdcMem = CreateCompatibleDC (hdc) ; 
SelectObject (hdcMem, hBitmap) ; 
BitBlt (hdc, 100, 100, 100, 100, hdcMem, 0, 0, SRCCOPY) ;
...
</code></pre>
<p>Ich will es so in einem Bitmap speichern, da wenn ich es ja in WM_COMMAND direkt zeichnen würde, bei einem Aufruf von WM_SIZE bzw. WM_PAINT verschwinden würde.</p>
<p>Das Problem an meinem Code ist, dass nichts nach einem Klick auf den Button gezeichnet wird. Wenn ich das ganze ohne Bitmap und in WM_COMMAND direkt mache geht es, bloß beim Neuzeichnen verschwindet es.</p>
<p>Wie kann ich es am besten in WM_COMMAND zwischenspeichern und dann bei WM_PAINT zeichnen? Und was mache ich bei dem obigen Code falsch?</p>
<p>MfG, Michael</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1519921</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1519921</guid><dc:creator><![CDATA[michib]]></dc:creator><pubDate>Fri, 30 May 2008 19:19:01 GMT</pubDate></item><item><title><![CDATA[Reply to Screenshot auf das Fenster zeichnen on Fri, 30 May 2008 23:29:03 GMT]]></title><description><![CDATA[<p>Hallo,<br />
eine Vermutung von mir (bin aber selbst mit C/C++ erst ganz am Anfang und am rumprobieren):<br />
Wenn du die Daten des Bitmap zwischenspeichern willst, musst du so weit ich weiß<br />
die Deklaration statisch machen:</p>
<pre><code>static HBTIMAP hBitmap;
</code></pre>
<p>Das muss soweit ich weiß sein, da beide WindowMessages in einem eigenen Funktionsaufruf passieren (wird ja auch ein anderer switch-case durchlaufen). Wenn das Bitmap nicht static ist, wird es beim ersten Aufruf (WM_COMMAND) erzeugt und ist innerhalb des WM_COMMAND-Kontext vorhanden.<br />
Beim Aufruf mit der nächsten WindowMessage (WM_PAINT) wird ohne &quot;static&quot;eine neue (leere, ggf. sogar uninitialisierte) HBITMAP-Strukter im Speicher angelegt, die logischerweise auf jeden Fall nicht den Screenshot enthält.<br />
(das static erweitert die Lebensdauer der Variablen, so dass diese bis zum Programmende existiert und der Wert auch bei erneutem Funktionsaufruf erhalten bleibt)</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1519989</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1519989</guid><dc:creator><![CDATA[powerloop]]></dc:creator><pubDate>Fri, 30 May 2008 23:29:03 GMT</pubDate></item></channel></rss>