<?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[Zu viele DC&#x27;s]]></title><description><![CDATA[<p>Ich hab ne Mini-Grafikanwendung geschrieben. Und jedesmal wird ein neues DC erstellt. Nach ca. 1000 Aufrufen ist das Programm aber meist überlastet und stürzt ab, und der Windowsspeicher ist auch gleich voll.</p>
<p>Wie kann ich das Problem anders lösen?</p>
<p>Ich mach das im moment so:</p>
<pre><code class="language-cpp">void CPaintDlg::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Code für die Behandlungsroutine für Nachrichten hier einfügen und/oder Standard aufrufen
	if((nFlags &amp; MK_LBUTTON) == MK_LBUTTON)
	{
		if(point.x&lt;=grenze+dicke/2)
			point.x=grenze+dicke/2;
		if(m_iPrevX&lt;=grenze+dicke/2)
			m_iPrevX=grenze+dicke/2;

		CClientDC dc(this);
		Pen.CreatePen(NULL,dicke,RGB(r,g,b));
		CPen* pOldPen = dc.SelectObject(&amp;Pen);		
		dc.MoveTo(m_iPrevX,m_iPrevY);
		dc.LineTo(point.x, point.y);
		dc.SelectObject(pOldPen);

		m_iPrevX=point.x;
		m_iPrevY=point.y;
	}
	CDialog::OnMouseMove(nFlags, point);
}
</code></pre>
<p>Ein &quot;CClientDC dc(this)&quot; kann man ja leider nicht als Membervariable erstellen. Habt ihr ne Idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/57876/zu-viele-dc-s</link><generator>RSS for Node</generator><lastBuildDate>Tue, 02 Jun 2026 17:18:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/57876.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 08 Dec 2003 16:25:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zu viele DC&#x27;s on Mon, 08 Dec 2003 16:25:15 GMT]]></title><description><![CDATA[<p>Ich hab ne Mini-Grafikanwendung geschrieben. Und jedesmal wird ein neues DC erstellt. Nach ca. 1000 Aufrufen ist das Programm aber meist überlastet und stürzt ab, und der Windowsspeicher ist auch gleich voll.</p>
<p>Wie kann ich das Problem anders lösen?</p>
<p>Ich mach das im moment so:</p>
<pre><code class="language-cpp">void CPaintDlg::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Code für die Behandlungsroutine für Nachrichten hier einfügen und/oder Standard aufrufen
	if((nFlags &amp; MK_LBUTTON) == MK_LBUTTON)
	{
		if(point.x&lt;=grenze+dicke/2)
			point.x=grenze+dicke/2;
		if(m_iPrevX&lt;=grenze+dicke/2)
			m_iPrevX=grenze+dicke/2;

		CClientDC dc(this);
		Pen.CreatePen(NULL,dicke,RGB(r,g,b));
		CPen* pOldPen = dc.SelectObject(&amp;Pen);		
		dc.MoveTo(m_iPrevX,m_iPrevY);
		dc.LineTo(point.x, point.y);
		dc.SelectObject(pOldPen);

		m_iPrevX=point.x;
		m_iPrevY=point.y;
	}
	CDialog::OnMouseMove(nFlags, point);
}
</code></pre>
<p>Ein &quot;CClientDC dc(this)&quot; kann man ja leider nicht als Membervariable erstellen. Habt ihr ne Idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/411157</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/411157</guid><dc:creator><![CDATA[BF_31]]></dc:creator><pubDate>Mon, 08 Dec 2003 16:25:15 GMT</pubDate></item><item><title><![CDATA[Reply to Zu viele DC&#x27;s on Mon, 08 Dec 2003 16:40:25 GMT]]></title><description><![CDATA[<p>Meinst du nicht, dass es eher an deinem Pen liegt? Du rufst jedesmal Create auf, zerstörst den erstellten Pen aber nie ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/411176</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/411176</guid><dc:creator><![CDATA[dEUs]]></dc:creator><pubDate>Mon, 08 Dec 2003 16:40:25 GMT</pubDate></item><item><title><![CDATA[Reply to Zu viele DC&#x27;s on Mon, 08 Dec 2003 16:42:19 GMT]]></title><description><![CDATA[<p>Aloha,</p>
<p>das Problem ist nicht die DC, sondern die unendlichen Pens, die Du erschaffst.</p>
<p>Hast Du Win 2k oder XP kannst Du über den Taskmanager schön beobachten, wie Du Dir selbst ins Knie schießt. <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>
<p>Schau Dir mal die Registerkarte GDI-Objekte an, die Anzahl sollte immer dann ansteigen, wenn Du den linken Button der Mause drückst und dieselbe bewegst.</p>
<p>Der Pen muß gelöscht werden mit</p>
<pre><code>Pen.DeleteObject();
</code></pre>
<p>Grüße</p>
<p>BOA</p>
]]></description><link>https://www.c-plusplus.net/forum/post/411179</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/411179</guid><dc:creator><![CDATA[BOA]]></dc:creator><pubDate>Mon, 08 Dec 2003 16:42:19 GMT</pubDate></item><item><title><![CDATA[Reply to Zu viele DC&#x27;s on Mon, 08 Dec 2003 16:44:34 GMT]]></title><description><![CDATA[<p>Mist, zu langsam....</p>
<p>Allerdings könnte man mal mit ReleaseDC auch mal die DC am Ende löschen.<br />
Da bin ich mir aber net sicher, ob die nicht automatisch gelöscht wird, wenn die Funktion zu Ende is... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Naja, lösche erstmal die Pens und beobachte die GDI-Objekte.</p>
<p>Grüße</p>
<p>BOA</p>
]]></description><link>https://www.c-plusplus.net/forum/post/411183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/411183</guid><dc:creator><![CDATA[BOA]]></dc:creator><pubDate>Mon, 08 Dec 2003 16:44:34 GMT</pubDate></item><item><title><![CDATA[Reply to Zu viele DC&#x27;s on Mon, 08 Dec 2003 16:47:11 GMT]]></title><description><![CDATA[<p>Es liegt an den Pens:</p>
<p>MSDN schrieb:</p>
<blockquote>
<p>The CClientDC class is derived from CDC and takes care of calling the Windows functions GetDC at construction time and <strong>ReleaseDC at destruction time</strong>. This means that the device context associated with a CClientDC object is the client area of a window.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/411185</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/411185</guid><dc:creator><![CDATA[dEUs]]></dc:creator><pubDate>Mon, 08 Dec 2003 16:47:11 GMT</pubDate></item><item><title><![CDATA[Reply to Zu viele DC&#x27;s on Mon, 08 Dec 2003 17:09:43 GMT]]></title><description><![CDATA[<p>Guter Mann,</p>
<p>dann schließt sich DC aus. Also, hau wech die Pens....</p>
<p>Wie gesagt öffne mal parallel den Taskmanager und beobachte die GDI-Objekte vor und nachdem Du</p>
<pre><code>Pen.DeleteObject()
</code></pre>
<p>eingefügt hast.</p>
<p>Grüße</p>
<p>BOA</p>
]]></description><link>https://www.c-plusplus.net/forum/post/411206</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/411206</guid><dc:creator><![CDATA[BOA]]></dc:creator><pubDate>Mon, 08 Dec 2003 17:09:43 GMT</pubDate></item><item><title><![CDATA[Reply to Zu viele DC&#x27;s on Tue, 09 Dec 2003 16:48:23 GMT]]></title><description><![CDATA[<p>DANKE, hat funktioniert:)<br />
Darauf hätte ich ja auch selbst kommen können <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/412029</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/412029</guid><dc:creator><![CDATA[BF_31]]></dc:creator><pubDate>Tue, 09 Dec 2003 16:48:23 GMT</pubDate></item></channel></rss>