<?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[nach GetWindowDC() zeichnet sich das fenster manchmal nicht mehr richig neu]]></title><description><![CDATA[<p>Hallo,</p>
<p>nach folgender Funktion wird das Fenster, dass ich mit GetWindowDC() auslese, teilweise nicht mehr richtig neugezeichnet. Alte Teile werden nicht richtig gelöscht, sondern einfach nur übermalt und Fenster, die ich darüber ziehe, hinterlassen &quot;Schlieren&quot;.<br />
Ich dachte, das Problem gibt es nur, wenn man nicht ReleaseDC aufruft, aber ReleaseDC gibt 1 zurück.</p>
<pre><code class="language-cpp">HDC hdc = GetWindowDC(hwnd);
	HDC _2hdc = CreateCompatibleDC(hdc);//HDC to put the hidden window in
	HBITMAP hbmp = CreateCompatibleBitmap(hdc,winWidth, winHeight);

	SelectObject(_2hdc,hbmp);
	PrintWindow(hwnd,_2hdc,0);

	HDC hdcMem = CreateCompatibleDC(_2hdc);//hdc to copy the needed part of the hidden window in(stored in _2hdc)
	HBITMAP hbmp2 = CreateCompatibleBitmap(_2hdc,clientWidth,clientHeight);//bmp with hidden window
	SelectObject(hdcMem, hbmp2);
	BitBlt(hdcMem, 0,0,clientWidth,clientHeight, _2hdc, xOffset,yOffset, SRCCOPY);

      BITMAPINFO* bmInfo = new BITMAPINFO();				
      bmInfo-&gt;bmiHeader.biSize = 40;
      bmInfo-&gt;bmiHeader.biWidth = clientWidth;
      bmInfo-&gt;bmiHeader.biHeight = clientHeight;
      bmInfo-&gt;bmiHeader.biPlanes = 1;
      bmInfo-&gt;bmiHeader.biBitCount = BytesPerPixel*8;
      bmInfo-&gt;bmiHeader.biCompression = BI_RGB;
      bmInfo-&gt;bmiHeader.biSizeImage = 0;
      bmInfo-&gt;bmiHeader.biXPelsPerMeter = 0;
      bmInfo-&gt;bmiHeader.biYPelsPerMeter = 0;
      bmInfo-&gt;bmiHeader.biClrUsed = 0;
      bmInfo-&gt;bmiHeader.biClrImportant = 0;

	GetDIBits(hdcMem, hbmp2, 0,clientHeight, bBytes, bmInfo, DIB_RGB_COLORS);
	delete bmInfo;
	DeleteDC(_2hdc);
	DeleteDC(hdcMem);
	DeleteObject(hbmp);
	DeleteObject(hbmp2);
	if(!ReleaseDC(hwnd, hdc))
		cout &lt;&lt; &quot;error while releasing dc&quot; &lt;&lt; endl;
</code></pre>
<p>Muss ich noch mehr/anders releasen?</p>
<p>danke im voraus<br />
veio</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/209544/nach-getwindowdc-zeichnet-sich-das-fenster-manchmal-nicht-mehr-richig-neu</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Apr 2026 03:10:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/209544.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 31 Mar 2008 21:39:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to nach GetWindowDC() zeichnet sich das fenster manchmal nicht mehr richig neu on Mon, 31 Mar 2008 21:39:55 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>nach folgender Funktion wird das Fenster, dass ich mit GetWindowDC() auslese, teilweise nicht mehr richtig neugezeichnet. Alte Teile werden nicht richtig gelöscht, sondern einfach nur übermalt und Fenster, die ich darüber ziehe, hinterlassen &quot;Schlieren&quot;.<br />
Ich dachte, das Problem gibt es nur, wenn man nicht ReleaseDC aufruft, aber ReleaseDC gibt 1 zurück.</p>
<pre><code class="language-cpp">HDC hdc = GetWindowDC(hwnd);
	HDC _2hdc = CreateCompatibleDC(hdc);//HDC to put the hidden window in
	HBITMAP hbmp = CreateCompatibleBitmap(hdc,winWidth, winHeight);

	SelectObject(_2hdc,hbmp);
	PrintWindow(hwnd,_2hdc,0);

	HDC hdcMem = CreateCompatibleDC(_2hdc);//hdc to copy the needed part of the hidden window in(stored in _2hdc)
	HBITMAP hbmp2 = CreateCompatibleBitmap(_2hdc,clientWidth,clientHeight);//bmp with hidden window
	SelectObject(hdcMem, hbmp2);
	BitBlt(hdcMem, 0,0,clientWidth,clientHeight, _2hdc, xOffset,yOffset, SRCCOPY);

      BITMAPINFO* bmInfo = new BITMAPINFO();				
      bmInfo-&gt;bmiHeader.biSize = 40;
      bmInfo-&gt;bmiHeader.biWidth = clientWidth;
      bmInfo-&gt;bmiHeader.biHeight = clientHeight;
      bmInfo-&gt;bmiHeader.biPlanes = 1;
      bmInfo-&gt;bmiHeader.biBitCount = BytesPerPixel*8;
      bmInfo-&gt;bmiHeader.biCompression = BI_RGB;
      bmInfo-&gt;bmiHeader.biSizeImage = 0;
      bmInfo-&gt;bmiHeader.biXPelsPerMeter = 0;
      bmInfo-&gt;bmiHeader.biYPelsPerMeter = 0;
      bmInfo-&gt;bmiHeader.biClrUsed = 0;
      bmInfo-&gt;bmiHeader.biClrImportant = 0;

	GetDIBits(hdcMem, hbmp2, 0,clientHeight, bBytes, bmInfo, DIB_RGB_COLORS);
	delete bmInfo;
	DeleteDC(_2hdc);
	DeleteDC(hdcMem);
	DeleteObject(hbmp);
	DeleteObject(hbmp2);
	if(!ReleaseDC(hwnd, hdc))
		cout &lt;&lt; &quot;error while releasing dc&quot; &lt;&lt; endl;
</code></pre>
<p>Muss ich noch mehr/anders releasen?</p>
<p>danke im voraus<br />
veio</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1484103</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1484103</guid><dc:creator><![CDATA[veio]]></dc:creator><pubDate>Mon, 31 Mar 2008 21:39:55 GMT</pubDate></item><item><title><![CDATA[Reply to nach GetWindowDC() zeichnet sich das fenster manchmal nicht mehr richig neu on Tue, 01 Apr 2008 10:35:31 GMT]]></title><description><![CDATA[<p>Wenn Du ein Objekt in einen DC selektierst (besonders Bitmaps), dann musst Du das Alte Objekt, dass Du durch SelectObject erhälst, wieder zurückselektieren. Andernfalls kann das Objekt nicht gelöscht werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1484315</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1484315</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Tue, 01 Apr 2008 10:35:31 GMT</pubDate></item><item><title><![CDATA[Reply to nach GetWindowDC() zeichnet sich das fenster manchmal nicht mehr richig neu on Wed, 02 Apr 2008 20:31:54 GMT]]></title><description><![CDATA[<p>Habe es mal analog zu folgendem probiert: <a href="http://msdn2.microsoft.com/en-us/library/ms532629(VS.85).aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/ms532629(VS.85).aspx</a></p>
<pre><code class="language-cpp">HDC hdc = GetWindowDC(hwnd);
	HDC _2hdc = CreateCompatibleDC(hdc);//HDC to put the hidden window in
	HBITMAP hbmpOld, hbmp = CreateCompatibleBitmap(hdc,winWidth, winHeight);

	hbmpOld = (HBITMAP)SelectObject(_2hdc,hbmp);
	PrintWindow(hwnd,_2hdc,0);

	HDC hdcMem = CreateCompatibleDC(_2hdc);//hdc to copy the needed part of the hidden window in(stored in _2hdc)
	HBITMAP hbmp2Old, hbmp2 = CreateCompatibleBitmap(_2hdc,clientWidth,clientHeight);//bmp with hidden window
	hbmp2Old = (HBITMAP)SelectObject(hdcMem, hbmp2);
	BitBlt(hdcMem, 0,0,clientWidth,clientHeight, _2hdc, xOffset,yOffset, SRCCOPY);

      BITMAPINFO* bmInfo = new BITMAPINFO();				
      bmInfo-&gt;bmiHeader.biSize = 40;
      bmInfo-&gt;bmiHeader.biWidth = clientWidth;
      bmInfo-&gt;bmiHeader.biHeight = clientHeight;
      bmInfo-&gt;bmiHeader.biPlanes = 1;
      bmInfo-&gt;bmiHeader.biBitCount = BytesPerPixel*8;
      bmInfo-&gt;bmiHeader.biCompression = BI_RGB;
      bmInfo-&gt;bmiHeader.biSizeImage = 0;
      bmInfo-&gt;bmiHeader.biXPelsPerMeter = 0;
      bmInfo-&gt;bmiHeader.biYPelsPerMeter = 0;
      bmInfo-&gt;bmiHeader.biClrUsed = 0;
      bmInfo-&gt;bmiHeader.biClrImportant = 0;

	GetDIBits(hdcMem, hbmp2, 0,clientHeight, bBytes, bmInfo, DIB_RGB_COLORS);

	//Cleaning up
	delete bmInfo;

	SelectObject(_2hdc, hbmpOld);
	SelectObject(hdcMem,hbmp2Old);

	if(!DeleteObject(hbmp))
		cout &lt;&lt; &quot;error while releasing hbmp&quot; &lt;&lt; endl;
	if(!DeleteObject(hbmp2))
		cout &lt;&lt; &quot;error while releasing hbmp2&quot; &lt;&lt; endl;

	DeleteDC(_2hdc);
	DeleteDC(hdcMem);
	if(!ReleaseDC(hwnd, hdc))
		cout &lt;&lt; &quot;error while releasing dc&quot; &lt;&lt; endl;
</code></pre>
<p>Klappt aber nicht.</p>
<p>Warum muss ich bei SelectObject immer casten? In den beispielen müssen die das nie.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1484456</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1484456</guid><dc:creator><![CDATA[veio]]></dc:creator><pubDate>Wed, 02 Apr 2008 20:31:54 GMT</pubDate></item><item><title><![CDATA[Reply to nach GetWindowDC() zeichnet sich das fenster manchmal nicht mehr richig neu on Wed, 02 Apr 2008 13:10:17 GMT]]></title><description><![CDATA[<p>suche rat <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1485212</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1485212</guid><dc:creator><![CDATA[veio]]></dc:creator><pubDate>Wed, 02 Apr 2008 13:10:17 GMT</pubDate></item><item><title><![CDATA[Reply to nach GetWindowDC() zeichnet sich das fenster manchmal nicht mehr richig neu on Wed, 02 Apr 2008 20:30:16 GMT]]></title><description><![CDATA[<p>ich glaube, die grafik fehler passieren immer dann, wenn während der ausführung der funktion(dauert so 20-40ms) der inhalt des fensters geändert wird.</p>
<p>edit: nen RedrawWindow() oder UpdateWindow() nach der Funktion aufzurufen hilft auch nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1485490</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1485490</guid><dc:creator><![CDATA[veio]]></dc:creator><pubDate>Wed, 02 Apr 2008 20:30:16 GMT</pubDate></item><item><title><![CDATA[Reply to nach GetWindowDC() zeichnet sich das fenster manchmal nicht mehr richig neu on Thu, 03 Apr 2008 01:06:53 GMT]]></title><description><![CDATA[<p>hab noch mal ein wenig rum probiert und der übeltäter ist die funktion printwindow() - macht auch irgendwie ein wenig sinn, da die funktion ja den fenster inhalt nicht im fenster ausgibt sondern in meine variable und vielleicht somit veränderungen, die in der zeit passieren, schluckt oder so etwas.</p>
<p>Wie sage ich dem Fenster, dass es sich neu zeichnen soll, so wie es sich bei zurückholen aus den minimierten zustand neu zeichnet? UpdateWindow und redrawWindow() haben nicht funktioniert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Müsste</p>
<p>SendMessageA(hwnd, WM_ERASEBKGND, WPARAM(hdc),PRF_ERASEBKGND);</p>
<p>nicht den Hintergrund neumalen? das ist nämlich immer das, was falsch gezeich net wird. Klappt aber auch nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f611.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--expressionless_face"
      title="-_-"
      alt="😑"
    /> Übergebe ich den hdc richtig bzw. den richtigen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1485573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1485573</guid><dc:creator><![CDATA[veio]]></dc:creator><pubDate>Thu, 03 Apr 2008 01:06:53 GMT</pubDate></item><item><title><![CDATA[Reply to nach GetWindowDC() zeichnet sich das fenster manchmal nicht mehr richig neu on Thu, 03 Apr 2008 03:30:15 GMT]]></title><description><![CDATA[<p>InvalidateRect()</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1485580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1485580</guid><dc:creator><![CDATA[WebFritzi]]></dc:creator><pubDate>Thu, 03 Apr 2008 03:30:15 GMT</pubDate></item><item><title><![CDATA[Reply to nach GetWindowDC() zeichnet sich das fenster manchmal nicht mehr richig neu on Thu, 03 Apr 2008 06:47:34 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18861">@veio</a>: Kann es sein, dass dass Du außerhaöb von WM_PAINT zeichnest.</p>
<p>Grundsätzlich sollltest Du nur in Deinem WM_PAINT Handler zeichnen und nur durch InvalidateRect/UpdateWindow/RedrawWindow ein neuzeichnen veranlassen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1485609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1485609</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 03 Apr 2008 06:47:34 GMT</pubDate></item><item><title><![CDATA[Reply to nach GetWindowDC() zeichnet sich das fenster manchmal nicht mehr richig neu on Thu, 03 Apr 2008 15:25:09 GMT]]></title><description><![CDATA[<p>Martin Richter schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18861">@veio</a>: Kann es sein, dass dass Du außerhaöb von WM_PAINT zeichnest.</p>
<p>Grundsätzlich sollltest Du nur in Deinem WM_PAINT Handler zeichnen und nur durch InvalidateRect/UpdateWindow/RedrawWindow ein neuzeichnen veranlassen...</p>
</blockquote>
<p>Ich selber zeichne gar nicht, ich will nur das Fenster auslesen.</p>
<p>Ich werde das mit invalidateRect() nachher mal probieren, nur im Moment startet mein Notebook nicht mehr °°</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1485914</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1485914</guid><dc:creator><![CDATA[veio]]></dc:creator><pubDate>Thu, 03 Apr 2008 15:25:09 GMT</pubDate></item><item><title><![CDATA[Reply to nach GetWindowDC() zeichnet sich das fenster manchmal nicht mehr richig neu on Sun, 06 Apr 2008 18:49:04 GMT]]></title><description><![CDATA[<p>InvalidateRect() klappt zumindest für die Clientarea.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1487550</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1487550</guid><dc:creator><![CDATA[veio]]></dc:creator><pubDate>Sun, 06 Apr 2008 18:49:04 GMT</pubDate></item></channel></rss>