<?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[Farbe eines hBrush ändern]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe folgendes problem. Ich zeichne mit einem Brush auf meiner Anwendung, siehe Code:</p>
<pre><code class="language-cpp">void Draw()
{
HDC hDC=GetDC(hWnd);
HBRUSH hBr=CreateSolidBrush(RGB(0,0,0));
RECT r;
//Ein rechteck zeichnen
r.left=0;
r.right=10;
r.top=0;
r.bottom=10;
FillRect(hDC,&amp;r,hBr);
//noch ein Rechteck in einer anderen Farbe zeichnen
hBr=CreateSolidBrush(RGB(100,100,100));
r.left=10;
r.right=20;
r.top=10;
r.bottom=20;
FillRect(hDC,&amp;r,hBr);

ReleaseDC(hWnd,hDC);
DeleteObject(hBr);
}
</code></pre>
<p>Das Problem ist das beim sehr häufigen aufrufen der Funktion Draw mein Speicher voll läuft. Dies liegt daran, das ich den Brush vor dem Farbenwechsel nicht lösche. Dies geht auch nicht, da ich zuerst hDC freigeben muss.<br />
Gibt es eine Möglichkeit die Farbe des Brush zu ändern ohne<br />
CreateSolidBrush() zu verwenden?</p>
<p>Gruß<br />
spacehelix</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/153883/farbe-eines-hbrush-ändern</link><generator>RSS for Node</generator><lastBuildDate>Thu, 23 Jul 2026 09:36:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/153883.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 21 Jul 2006 14:02:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Farbe eines hBrush ändern on Fri, 21 Jul 2006 14:02:02 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe folgendes problem. Ich zeichne mit einem Brush auf meiner Anwendung, siehe Code:</p>
<pre><code class="language-cpp">void Draw()
{
HDC hDC=GetDC(hWnd);
HBRUSH hBr=CreateSolidBrush(RGB(0,0,0));
RECT r;
//Ein rechteck zeichnen
r.left=0;
r.right=10;
r.top=0;
r.bottom=10;
FillRect(hDC,&amp;r,hBr);
//noch ein Rechteck in einer anderen Farbe zeichnen
hBr=CreateSolidBrush(RGB(100,100,100));
r.left=10;
r.right=20;
r.top=10;
r.bottom=20;
FillRect(hDC,&amp;r,hBr);

ReleaseDC(hWnd,hDC);
DeleteObject(hBr);
}
</code></pre>
<p>Das Problem ist das beim sehr häufigen aufrufen der Funktion Draw mein Speicher voll läuft. Dies liegt daran, das ich den Brush vor dem Farbenwechsel nicht lösche. Dies geht auch nicht, da ich zuerst hDC freigeben muss.<br />
Gibt es eine Möglichkeit die Farbe des Brush zu ändern ohne<br />
CreateSolidBrush() zu verwenden?</p>
<p>Gruß<br />
spacehelix</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1101848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1101848</guid><dc:creator><![CDATA[spacehelix]]></dc:creator><pubDate>Fri, 21 Jul 2006 14:02:02 GMT</pubDate></item><item><title><![CDATA[Reply to Farbe eines hBrush ändern on Fri, 21 Jul 2006 14:44:18 GMT]]></title><description><![CDATA[<p>spacehelix schrieb:</p>
<blockquote>
<p>Dies geht auch nicht, da ich zuerst hDC freigeben muss.</p>
</blockquote>
<p>Nein musst du nicht.</p>
<p>So kann man es machen:</p>
<pre><code class="language-cpp">void Draw()
{
    HDC hDC = GetDC(hWnd);
    HBRUSH hBr = CreateSolidBrush(RGB(0,0,0));
    RECT r;
    // Ein rechteck zeichnen
    r.left   = 0;
    r.right  = 10;
    r.top    = 0;
    r.bottom = 10;
    FillRect(hDC, &amp;r, hBr);
    // noch ein Rechteck in einer anderen Farbe zeichnen
    DeleteObject(hBr);
    hBr = CreateSolidBrush(RGB(100,100,100));
    r.left   = 10;
    r.right  = 20;
    r.top    = 10;
    r.bottom = 20;
    FillRect(hDC, &amp;r, hBr);

    ReleaseDC(hWnd, hDC);
    DeleteObject(hBr);
}
</code></pre>
<p>Dir is schon klar, das GetDC() nicht das gleiche ist wie BeginPaint()...falls du die Funktion unter WM_PAINT aufrufst mal so btw.</p>
<p>PS: Wie wärs mit nem 2ten Brush ? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1101884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1101884</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Fri, 21 Jul 2006 14:44:18 GMT</pubDate></item><item><title><![CDATA[Reply to Farbe eines hBrush ändern on Fri, 21 Jul 2006 15:00:11 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich hab das so ausprobiert wie du es hier vorschlägst. Die Funktion DeleteObjekt(hBr); liefert dann aber NULL zurück und mit GetLastError erscheint der Fehler mit der Nummer 6 (The handle is invalid.).</p>
<p>Probiers mal aus.</p>
<pre><code class="language-cpp">if (DeleteObject==NULL)
DWORD errorNr=GetLastError();
</code></pre>
<p>Gruß spacehelix</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1101891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1101891</guid><dc:creator><![CDATA[spacehelix]]></dc:creator><pubDate>Fri, 21 Jul 2006 15:00:11 GMT</pubDate></item><item><title><![CDATA[Reply to Farbe eines hBrush ändern on Fri, 21 Jul 2006 17:47:56 GMT]]></title><description><![CDATA[<p>spacehelix schrieb:</p>
<blockquote>
<p>Hi,</p>
<p>ich hab das so ausprobiert wie du es hier vorschlägst. Die Funktion DeleteObjekt(hBr); liefert dann aber NULL zurück und mit GetLastError erscheint der Fehler mit der Nummer 6 (The handle is invalid.).</p>
<p>Probiers mal aus.</p>
<pre><code class="language-cpp">if (DeleteObject==NULL)
DWORD errorNr=GetLastError();
</code></pre>
<p>Gruß spacehelix</p>
</blockquote>
<p>Was soll denn bitte DeleteObject==NULL bewirken =? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /><br />
Du kannst doch nicht die Funktionsadresse mit NULL vergleichen (ok man kanns schon aber was soll das ?)</p>
<p>MSDN zu DeleteObject(...) schrieb:</p>
<blockquote>
<p>If the function succeeds, the return value is nonzero.</p>
<p>If the specified handle is not valid or is currently selected into a device context, the return value is zero.</p>
</blockquote>
<p>Außerdem:</p>
<p>Prototyp der Funktion DeleteObject schrieb:</p>
<blockquote>
<p><strong>BOOL</strong> DeleteObject(<br />
HGDIOBJ hObject // handle to graphic object<br />
);</p>
</blockquote>
<p>So kannst du, wenn es dir wichtig ist, auf Fehler prüfen:</p>
<pre><code class="language-cpp">void Draw(HWND hWnd)
{
    HDC hDC = GetDC(hWnd);
    HBRUSH hBr = CreateSolidBrush(RGB(0,0,0));
    RECT r;
    // Ein rechteck zeichnen
    r.left   = 100;
    r.right  = 10;
    r.top    = 100;
    r.bottom = 10;
    FillRect(hDC, &amp;r, hBr);
    // noch ein Rechteck in einer anderen Farbe zeichnen
    if(!DeleteObject(hBr))
		MessageBox(0,0,0,0);
    hBr = CreateSolidBrush(RGB(100,100,100));
    r.left   = 100;
    r.right  = 200;
    r.top    = 100;
    r.bottom = 200;
    FillRect(hDC, &amp;r, hBr);

    ReleaseDC(hWnd, hDC);
    if(!DeleteObject(hBr))
		MessageBox(0,0,0,0);
}
</code></pre>
<p>PS_1: Hab die Funktion (-&gt;Parameterliste) nur deshalb modifiziert, da ich es dann besser testen konnte. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /></p>
<p>PS_2: NULL ist in C++ zwar als 0 definiert, und BOOL als int (Win32), somit wäre ne implizite Typenumwandlung nat. möglich, allerdings würde ich NULL nur in Verbindung mit Zeigern verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1101977</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1101977</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Fri, 21 Jul 2006 17:47:56 GMT</pubDate></item></channel></rss>