<?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[PatBlt funktioniert nur bei GetDC(0)?]]></title><description><![CDATA[<p>Hi!<br />
Wegen einem Link, den Flenders mir in einem anderen Thread geschickt hat, habe ich mich mal mit PatBlt beschäftigt...damit ist es ja möglich Stellen mit einer bestimmten Farbe schnell zu färben...wie es in dem Link bei dem Rechteck geschieht, jetzt habe ich mal einfach probiert, in einer externen Anwendung ein Stück meines Fensters mit schwarz zu invertieren und wieder zurück. Das klappt aber nur, wenn ich als DC den kompletten Bildschirm hernehme, bei meinem eigenen Fenster funktioniert das nicht, hier die Codes:</p>
<pre><code class="language-cpp">LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	PAINTSTRUCT ps;
	HDC hDC;
	switch(message)
	{

	case WM_LBUTTONDOWN:
		InvalidateRect(hWnd, 0, TRUE);
		break;
	case WM_PAINT:
		hDC = GetDC(hWnd);
		HBRUSH hBR = CreateSolidBrush(RGB(255,255,255));
		SelectObject(hDC, hBR);
		PatBlt(hDC, 0, 0, 200, 200, PATINVERT);
                  DeleteObject(hBR);
		DeleteDC(hDC);
		break;

	case WM_CREATE:
		break;

	case WM_DESTROY:
		PostQuitMessage(0);
		break;

	}

	return DefWindowProc(hWnd, message, wParam, lParam);
}
</code></pre>
<pre><code class="language-cpp">LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	PAINTSTRUCT ps;
	HDC hDC;
	switch(message)
	{

	case WM_LBUTTONDOWN:
		InvalidateRect(hWnd, 0, TRUE);
		break;
	case WM_PAINT:
		hDC = GetDC(0);
		HBRUSH hBR = CreateSolidBrush(RGB(255,255,255));
		SelectObject(hDC, hBR);
		PatBlt(hDC, 0, 0, 200, 200, PATINVERT);
		DeleteDC(hDC);
                  DeleteObject(hBR);
		break;

	case WM_CREATE:
		break;

	case WM_DESTROY:
		PostQuitMessage(0);
		break;

	}

	return DefWindowProc(hWnd, message, wParam, lParam);
}
</code></pre>
<p>Der obere Code funktioniert, der untere nicht...</p>
<p>Compiler</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/85808/patblt-funktioniert-nur-bei-getdc-0</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Apr 2026 06:12:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/85808.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 13 Sep 2004 11:25:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to PatBlt funktioniert nur bei GetDC(0)? on Mon, 13 Sep 2004 11:25:52 GMT]]></title><description><![CDATA[<p>Hi!<br />
Wegen einem Link, den Flenders mir in einem anderen Thread geschickt hat, habe ich mich mal mit PatBlt beschäftigt...damit ist es ja möglich Stellen mit einer bestimmten Farbe schnell zu färben...wie es in dem Link bei dem Rechteck geschieht, jetzt habe ich mal einfach probiert, in einer externen Anwendung ein Stück meines Fensters mit schwarz zu invertieren und wieder zurück. Das klappt aber nur, wenn ich als DC den kompletten Bildschirm hernehme, bei meinem eigenen Fenster funktioniert das nicht, hier die Codes:</p>
<pre><code class="language-cpp">LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	PAINTSTRUCT ps;
	HDC hDC;
	switch(message)
	{

	case WM_LBUTTONDOWN:
		InvalidateRect(hWnd, 0, TRUE);
		break;
	case WM_PAINT:
		hDC = GetDC(hWnd);
		HBRUSH hBR = CreateSolidBrush(RGB(255,255,255));
		SelectObject(hDC, hBR);
		PatBlt(hDC, 0, 0, 200, 200, PATINVERT);
                  DeleteObject(hBR);
		DeleteDC(hDC);
		break;

	case WM_CREATE:
		break;

	case WM_DESTROY:
		PostQuitMessage(0);
		break;

	}

	return DefWindowProc(hWnd, message, wParam, lParam);
}
</code></pre>
<pre><code class="language-cpp">LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	PAINTSTRUCT ps;
	HDC hDC;
	switch(message)
	{

	case WM_LBUTTONDOWN:
		InvalidateRect(hWnd, 0, TRUE);
		break;
	case WM_PAINT:
		hDC = GetDC(0);
		HBRUSH hBR = CreateSolidBrush(RGB(255,255,255));
		SelectObject(hDC, hBR);
		PatBlt(hDC, 0, 0, 200, 200, PATINVERT);
		DeleteDC(hDC);
                  DeleteObject(hBR);
		break;

	case WM_CREATE:
		break;

	case WM_DESTROY:
		PostQuitMessage(0);
		break;

	}

	return DefWindowProc(hWnd, message, wParam, lParam);
}
</code></pre>
<p>Der obere Code funktioniert, der untere nicht...</p>
<p>Compiler</p>
]]></description><link>https://www.c-plusplus.net/forum/post/605836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/605836</guid><dc:creator><![CDATA[Compiler]]></dc:creator><pubDate>Mon, 13 Sep 2004 11:25:52 GMT</pubDate></item><item><title><![CDATA[Reply to PatBlt funktioniert nur bei GetDC(0)? on Mon, 13 Sep 2004 11:28:48 GMT]]></title><description><![CDATA[<p>Ich würde mal BeginPaint und EndPaint nehmen statt GetDC(hWnd);</p>
]]></description><link>https://www.c-plusplus.net/forum/post/605843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/605843</guid><dc:creator><![CDATA[BEGIN + END]]></dc:creator><pubDate>Mon, 13 Sep 2004 11:28:48 GMT</pubDate></item><item><title><![CDATA[Reply to PatBlt funktioniert nur bei GetDC(0)? on Mon, 13 Sep 2004 11:40:18 GMT]]></title><description><![CDATA[<p>daran liegts aber nicht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/605872</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/605872</guid><dc:creator><![CDATA[Compiler]]></dc:creator><pubDate>Mon, 13 Sep 2004 11:40:18 GMT</pubDate></item><item><title><![CDATA[Reply to PatBlt funktioniert nur bei GetDC(0)? on Mon, 13 Sep 2004 16:32:56 GMT]]></title><description><![CDATA[<p>Compiler schrieb:</p>
<blockquote>
<p>Das klappt aber nur, wenn ich als DC den kompletten Bildschirm hernehme, bei meinem eigenen Fenster funktioniert das nicht.</p>
<pre><code class="language-cpp">HDC = GetDC(hWnd);
</code></pre>
<pre><code class="language-cpp">hDC = GetDC(0);
</code></pre>
<p>Der obere Code funktioniert, der untere nicht...</p>
</blockquote>
<p>Welcher funktioniert denn jetzt <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>
]]></description><link>https://www.c-plusplus.net/forum/post/606241</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/606241</guid><dc:creator><![CDATA[flenders]]></dc:creator><pubDate>Mon, 13 Sep 2004 16:32:56 GMT</pubDate></item><item><title><![CDATA[Reply to PatBlt funktioniert nur bei GetDC(0)? on Mon, 13 Sep 2004 22:08:33 GMT]]></title><description><![CDATA[<ol>
<li>GetDC erwartet kein DeleteDC !</li>
<li>Ich hab mal was von Rückgabewerten im Wind säuseln hören...</li>
</ol>
]]></description><link>https://www.c-plusplus.net/forum/post/606482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/606482</guid><dc:creator><![CDATA[vineon]]></dc:creator><pubDate>Mon, 13 Sep 2004 22:08:33 GMT</pubDate></item><item><title><![CDATA[Reply to PatBlt funktioniert nur bei GetDC(0)? on Mon, 13 Sep 2004 22:13:11 GMT]]></title><description><![CDATA[<p>Du solltest dich erstmal mit GDI allgemein beschäftigen. Du hast viel falsch gemacht. Zum Beispiel bei SelectObject.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/606485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/606485</guid><dc:creator><![CDATA[entity]]></dc:creator><pubDate>Mon, 13 Sep 2004 22:13:11 GMT</pubDate></item><item><title><![CDATA[Reply to PatBlt funktioniert nur bei GetDC(0)? on Tue, 14 Sep 2004 12:53:55 GMT]]></title><description><![CDATA[<p>Moin Compiler,</p>
<p>Die Fensterfunktion sollte mit <strong>return 0;</strong> verlassen werden, wenn Du eine Nachricht behandelt hast. In Deinem Code wird <strong>jedesmal</strong> die DefWindowProc() aufgerufen. BÖSER FEHLER. Ersetze also das <strong>break;</strong> durch <strong>return 0;</strong>.</p>
<p>Die WM_PAINT-Nachricht sollte so aussehen:</p>
<pre><code class="language-cpp">LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
  PAINTSTRUCT ps;
  HDC         hDC;
  HBRUSH      hBR, hOldBR;

  .
  .
  .

    case WM_PAINT:

      hDC = BeginPaint(hWnd, &amp;ps);

      hBR = CreateSolidBrush(RGB(255,255,255));
      hOldBR = SelectObject(hDC, hBR);

      PatBlt(hDC, 0, 0, 200, 200, PATINVERT);

      SelectObject(hDC, hOldBR);
      DeleteObject(hBR);

      EndPaint(hWnd, &amp;ps);

      return 0;

   .
   .
   .
</code></pre>
<p>Ciao...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/606909</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/606909</guid><dc:creator><![CDATA[Kal El]]></dc:creator><pubDate>Tue, 14 Sep 2004 12:53:55 GMT</pubDate></item><item><title><![CDATA[Reply to PatBlt funktioniert nur bei GetDC(0)? on Tue, 14 Sep 2004 20:21:04 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">case WM_PAINT:
		{
		hDC = BeginPaint(hWnd, &amp;ps);;
		HBRUSH hBR = CreateSolidBrush(RGB(255,255,255));
		SelectObject(hDC, hBR);
		PatBlt(hDC, 0, 0, 200, 200, PATINVERT);
		EndPaint(hWnd, &amp;ps);
		}
		return 0;[
</code></pre>
<p>so funktionierts 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="😞"
    /> Bleibt immer schwarz!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/607349</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/607349</guid><dc:creator><![CDATA[Compiler]]></dc:creator><pubDate>Tue, 14 Sep 2004 20:21:04 GMT</pubDate></item><item><title><![CDATA[Reply to PatBlt funktioniert nur bei GetDC(0)? on Tue, 14 Sep 2004 20:31:56 GMT]]></title><description><![CDATA[<p>zeig doch das ganze programm :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/607359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/607359</guid><dc:creator><![CDATA[assemblierer]]></dc:creator><pubDate>Tue, 14 Sep 2004 20:31:56 GMT</pubDate></item><item><title><![CDATA[Reply to PatBlt funktioniert nur bei GetDC(0)? on Tue, 14 Sep 2004 21:33:27 GMT]]></title><description><![CDATA[<p>Weißt du was in der Function:</p>
<p>LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)</p>
<p>passiert, bzw. wann sie Aufgerufen wird, und wenn ja weißt du was <strong>passiert ist</strong><br />
wenn WM_PAINT drinn steht??</p>
<p>Warum steckst du sowas nicht in die WinMain Routine, wo es hin soll?</p>
<p>Es sind einige schönheitsfehler drinn, überlege das ganze mal mit Geduld und<br />
es wird klappen.</p>
<p>Oder mal anders gesagt, wenn ich dich Anrufe und sag ich habe ein Bild gemacht<br />
dann ist das so als ob Windows sagt WM_PAINT:<br />
Also Windows sagt WM_PAINT wenn er was gezeichnet hat, auch bei UpdateWindow<br />
und RedrawWindow.</p>
<p>Und noch ein ALSO: Überlege deine Vorgehensweise mal und lese in der MSDN.</p>
<p>PS: GetDC(0), giebt den Desktop als Device.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/607403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/607403</guid><dc:creator><![CDATA[MiC++ha]]></dc:creator><pubDate>Tue, 14 Sep 2004 21:33:27 GMT</pubDate></item><item><title><![CDATA[Reply to PatBlt funktioniert nur bei GetDC(0)? on Tue, 14 Sep 2004 21:49:15 GMT]]></title><description><![CDATA[<p>MiC++ha schrieb:</p>
<blockquote>
<p>Oder mal anders gesagt, wenn ich dich Anrufe und sag ich habe ein Bild gemacht<br />
dann ist das so als ob Windows sagt WM_PAINT:<br />
Also Windows sagt WM_PAINT wenn er was gezeichnet hat, auch bei UpdateWindow<br />
und RedrawWindow.</p>
</blockquote>
<p>Möchtest Du diesen Satz evtl. etwas korrigieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/607412</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/607412</guid><dc:creator><![CDATA[Hepi]]></dc:creator><pubDate>Tue, 14 Sep 2004 21:49:15 GMT</pubDate></item><item><title><![CDATA[Reply to PatBlt funktioniert nur bei GetDC(0)? on Tue, 14 Sep 2004 22:00:29 GMT]]></title><description><![CDATA[<p>Ja will ich, hatte was mit onPaint vom BCB durcheinander geworfen,<br />
man ich werde alt.</p>
<p>Also (mal wieder) WM_PAINT steht in der Message wenn windows für die Applikation, oder einer anderen was zeichnen soll.<br />
Das bedeutet das eine Anfrage zum Zeichnen gemacht wurde, auf diese kann<br />
man dann reagieren, aber damit so was kommt zu dem Zeitpunkt wo du beim<br />
Prüfen auf WM_PAINT was machen willst mußt du auch so ein Request senden.<br />
Da du ein DC auf dem Desktop hast klappt das dann auch, aber nicht bei deiner<br />
Applikation, da diese keine Message zum Zeichnen sendet.<br />
Oder so.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/607419</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/607419</guid><dc:creator><![CDATA[MiC++ha]]></dc:creator><pubDate>Tue, 14 Sep 2004 22:00:29 GMT</pubDate></item><item><title><![CDATA[Reply to PatBlt funktioniert nur bei GetDC(0)? on Wed, 15 Sep 2004 06:05:53 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/3394">@Compiler</a>:</p>
<p>Mir ging es erstmal darum Dir zu zeigen, was an Deiner Nachrichtenverarbeitung falsch ist. Das Du zwischen den inversen Zuständen hin- und herschalten möchtest, hatte ich überlesen.</p>
<p>Du möchtest ein Ausschnitt Deines Fensters invertieren, wenn Du die linke Maustaste drückst. Warum benutzt Du die PatBlt()-Funktion nicht bei der Nachricht WM_LBUTTONDOWN?</p>
<pre><code class="language-cpp">case WM_LBUTTONDOWN:

      hDC = GetDC(hwnd);
      PatBlt(hDC, 0, 0, 200, 200, PATINVERT);
      ReleaseDC(hwnd, hDC);      

      return 0;
</code></pre>
<p>Die WM_PAINT-Nachricht löscht Du komplett aus Deiner Funktion!!!!</p>
<p>Ciao...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/607482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/607482</guid><dc:creator><![CDATA[Kal El]]></dc:creator><pubDate>Wed, 15 Sep 2004 06:05:53 GMT</pubDate></item><item><title><![CDATA[Reply to PatBlt funktioniert nur bei GetDC(0)? on Wed, 15 Sep 2004 07:40:20 GMT]]></title><description><![CDATA[<p>Was willst du denn überhaupt invertieren, wenn du nichts ins Fenster zeichnest <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="😕"
    /> Dann kannst du doch auch gleich FillRect nehmen <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/607541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/607541</guid><dc:creator><![CDATA[flenders]]></dc:creator><pubDate>Wed, 15 Sep 2004 07:40:20 GMT</pubDate></item></channel></rss>