<?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[Warum bekommen meine Controls eine WM_PAINT - Message?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Mainwindow (WS_OVERLAPPEDWINDOW), in dem ich zwei Buttons und ein Edit-Control habe.<br />
Wenn ich das Fenster an der Fensterleiste packe und über den Screen ziehe, bleiben die Controls unberührt, sie bekommen keine Messages.<br />
Wenn ich aber das Mainwindow unten rechts an der Ecke packe und die Size ändere, dann bekommen alle meine Controls die Aufforderung, sich neu zu zeichen, obwohl sie von der Größenänderung nicht betroffen sind.<br />
Warum ist das so, bzw. kann ich darauf Einfluß nehmen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/220918/warum-bekommen-meine-controls-eine-wm_paint-message</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 05:58:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/220918.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 22 Aug 2008 19:07:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Warum bekommen meine Controls eine WM_PAINT - Message? on Fri, 22 Aug 2008 19:07:23 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Mainwindow (WS_OVERLAPPEDWINDOW), in dem ich zwei Buttons und ein Edit-Control habe.<br />
Wenn ich das Fenster an der Fensterleiste packe und über den Screen ziehe, bleiben die Controls unberührt, sie bekommen keine Messages.<br />
Wenn ich aber das Mainwindow unten rechts an der Ecke packe und die Size ändere, dann bekommen alle meine Controls die Aufforderung, sich neu zu zeichen, obwohl sie von der Größenänderung nicht betroffen sind.<br />
Warum ist das so, bzw. kann ich darauf Einfluß nehmen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1569817</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1569817</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Fri, 22 Aug 2008 19:07:23 GMT</pubDate></item><item><title><![CDATA[Reply to Warum bekommen meine Controls eine WM_PAINT - Message? on Sat, 23 Aug 2008 01:54:46 GMT]]></title><description><![CDATA[<p>kannst du den Source Code posten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1569903</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1569903</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 23 Aug 2008 01:54:46 GMT</pubDate></item><item><title><![CDATA[Reply to Warum bekommen meine Controls eine WM_PAINT - Message? on Sat, 23 Aug 2008 09:58:03 GMT]]></title><description><![CDATA[<p>Ich hab den Code aufs wesentliche gekürzt, der Effekt tritt immer noch auf:</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;

#define  ID_BUTTON1    1
#define  ID_BUTTON2    2
#define  ID_EDIT       3

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
     static TCHAR szAppName[] = TEXT (&quot;Test&quot;) ;
     HWND         hwnd ;
     MSG          msg ;
     WNDCLASS     wndclass ;

     wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
     wndclass.lpfnWndProc   = WndProc ;
     wndclass.cbClsExtra    = 0 ;
     wndclass.cbWndExtra    = 0 ;
     wndclass.hInstance     = hInstance ;
     wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
     wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
     wndclass.lpszMenuName  = NULL ;
     wndclass.lpszClassName = szAppName ;

     if (!RegisterClass (&amp;wndclass))
     {    
          MessageBox (NULL, TEXT (&quot;Fehler beim Registrieren des Mainwindows&quot;), 
                      szAppName, MB_ICONERROR) ;
          return 0 ;
     }

     hwnd = CreateWindow (szAppName, TEXT (&quot;Test des ColorButtons&quot;),
                          WS_OVERLAPPEDWINDOW,
                          CW_USEDEFAULT, CW_USEDEFAULT,
                          250, 200,
                          NULL, NULL, hInstance, NULL) ;

     ShowWindow (hwnd, iCmdShow) ;
     UpdateWindow (hwnd) ;
     while (GetMessage (&amp;msg, NULL, 0, 0))
          {
          TranslateMessage (&amp;msg) ;
          DispatchMessage (&amp;msg) ;
          }
     return msg.wParam ;
     }

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
     switch (message)
     {
     case WM_CREATE:
          CreateWindow(&quot;BUTTON&quot;, &quot;BT1&quot;, WS_CHILD | WS_VISIBLE, 5, 30, 100, 50, hwnd,
                       (HMENU) ID_BUTTON1, (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE), NULL);

          CreateWindow(&quot;BUTTON&quot;, &quot;BT2&quot;, WS_CHILD | WS_VISIBLE, 120, 30, 100, 50, hwnd,
                       (HMENU) ID_BUTTON2, (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE), NULL);

          CreateWindow(&quot;EDIT&quot;, &quot;edit&quot;, WS_CHILD | WS_VISIBLE | WS_BORDER, 5, 5, 215, 15, hwnd,
                       (HMENU) ID_EDIT, (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE), NULL);

          return 0 ;

     case WM_DESTROY :
          PostQuitMessage (0) ;
          return 0 ;
     }
     return DefWindowProc (hwnd, message, wParam, lParam) ;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1569980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1569980</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Sat, 23 Aug 2008 09:58:03 GMT</pubDate></item><item><title><![CDATA[Reply to Warum bekommen meine Controls eine WM_PAINT - Message? on Sat, 23 Aug 2008 15:59:42 GMT]]></title><description><![CDATA[<p>Belli schrieb:</p>
<blockquote>
<p>ich habe ein Mainwindow (WS_OVERLAPPEDWINDOW), in dem ich zwei Buttons und ein Edit-Control habe.<br />
Wenn ich das Fenster an der Fensterleiste packe und über den Screen ziehe, bleiben die Controls unberührt, sie bekommen keine Messages.<br />
Wenn ich aber das Mainwindow unten rechts an der Ecke packe und die Size ändere, dann bekommen alle meine Controls die Aufforderung, sich neu zu zeichen, obwohl sie von der Größenänderung nicht betroffen sind.<br />
Warum ist das so, bzw. kann ich darauf Einfluß nehmen?</p>
</blockquote>
<p>Das ist normales Verhalten. Warum sollten die Kindfenster eine Nachricht bekommen, wenn sich nur die Position des Frames verändert? Die Position der Kindfenster ändert sich nicht.<br />
Der gesamte DC Bereich wird gespeichert und mit verschoben. Das spart aus sicht von Windows viel Zeit,weil eben nichts neu gezeichnet werden muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1570166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1570166</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Sat, 23 Aug 2008 15:59:42 GMT</pubDate></item><item><title><![CDATA[Reply to Warum bekommen meine Controls eine WM_PAINT - Message? on Sun, 24 Aug 2008 01:58:05 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/35992">@Martin</a>: ich glaube ihn stört nicht dass beim Verschieben keine WM_PAINT kommt, sondern ihn stört dass beim Ändern der Grösse eine WM_PAINT an die Controls geht obwohl die nicht im &quot;betroffenen Bereich&quot; liegen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1570327</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1570327</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 24 Aug 2008 01:58:05 GMT</pubDate></item><item><title><![CDATA[Reply to Warum bekommen meine Controls eine WM_PAINT - Message? on Sun, 24 Aug 2008 05:56:50 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/35992">@Martin</a>: ich glaube ihn stört nicht dass beim Verschieben keine WM_PAINT kommt, sondern ihn stört dass beim Ändern der Grösse eine WM_PAINT an die Controls geht obwohl die nicht im &quot;betroffenen Bereich&quot; liegen.</p>
</blockquote>
<p>Wenn das so ist dann einfach</p>
<pre><code class="language-cpp">wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
</code></pre>
<p>in</p>
<pre><code class="language-cpp">wndclass.style         = 0;
</code></pre>
<p>ändern</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1570333</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1570333</guid><dc:creator><![CDATA[Malermeister]]></dc:creator><pubDate>Sun, 24 Aug 2008 05:56:50 GMT</pubDate></item><item><title><![CDATA[Reply to Warum bekommen meine Controls eine WM_PAINT - Message? on Sun, 24 Aug 2008 07:34:02 GMT]]></title><description><![CDATA[<p>@Malermeister:</p>
<p>Das scheint auf den ersten Blick das gewünschte Ergebnis zu bringen! Da ich nun den Style des Mainwindow geändert habe, heißt das nicht, daß eben dieses Mainwindow nun auch keine Nachricht mehr bei Sizeänderungen bekommt?<br />
Denn das könnte doch dann an anderer Stelle zu unerwünschten Effekten führen.<br />
Mir leuchtet einfach nicht ein, wieso ohne diese Änderung diese WM_Paint - Messages an die Child-Fenster gesendet werden, die ja, wie MartinRichter schon festgestellt hat, überflüssig sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1570346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1570346</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Sun, 24 Aug 2008 07:34:02 GMT</pubDate></item><item><title><![CDATA[Reply to Warum bekommen meine Controls eine WM_PAINT - Message? on Sun, 24 Aug 2008 17:23:25 GMT]]></title><description><![CDATA[<p>Du solltest das was Martin geschrieben hat nochmal lesen, das was du unterstellst steht da nicht.</p>
<p>Warum die Child-Fenster eine WM_PAINT bekommen? Ganz einfach, weil es sein könnte dass ein Child-Fenster sichtbar wird wenn man die Grösse ändert - und das muss dann natürlich gezeichnet werden, sonst ... sieht man es ja nicht!?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1570599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1570599</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 24 Aug 2008 17:23:25 GMT</pubDate></item><item><title><![CDATA[Reply to Warum bekommen meine Controls eine WM_PAINT - Message? on Mon, 25 Aug 2008 05:35:42 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13960">@Hustbaer</a>:</p>
<p>Ich kann mein Mainwindow auf dem Screen hin- und herschieben, ohne daß die Childfenster eine WM_PAINT - Message bekommen.<br />
Wenn ich das Mainwindow so positioniere, daß ein Childfenster zB links 'aus dem Bildschirmbereich heraus' verschoben und deshalb nicht mehr sichtbar ist, DANN bekommt es WM_PAINT - Nachrichten, wenn ich das Mainwindow wieder mehr in den Bildschirmbereich hineinziehe und das Childfenster sichtbar wird.<br />
Offensichtlich erkennt das OS genau, wann das Childfenster neu gemalt werden muß, und wann nicht.<br />
Deshalb wundert es mich, daß das Childfenster WM_PAINT - Messages immer dann bekommt, wenn ich vom Mainwindow die Size ändere, selbst dann, wenn das Childfenster nicht neu gemalt werden müsste, weil es zB in der linken oberen Ecke des Mainwindow positioniert ist, ich aber unten rechts am Mainwindow herumziehe.<br />
Wie gesagt, durch das Setzen des Style = 0 im Mainwindow kann ich dieses Verhalten unterdrücken, kann aber nicht so ganz übersehen, ob das andere, unerwünschte, Effekte nach sich ziehen könnte.<br />
Ich verstehe Deinen Hinweis auf Martin Richter ' s Posting nicht. Er stellt ja letztlich die gleiche Frage: &quot;Warum sollte eine WM_PAINT - Message erzeugt werden, wenn gar nicht neu gezeichnet werden muß?&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1570771</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1570771</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Mon, 25 Aug 2008 05:35:42 GMT</pubDate></item><item><title><![CDATA[Reply to Warum bekommen meine Controls eine WM_PAINT - Message? on Mon, 25 Aug 2008 06:11:45 GMT]]></title><description><![CDATA[<p>Bei einer Größenänderung muss Windows bei gesezten CS_HREDRAW | CS_VREDRAW Flags die gesamte Fensterfläche neu zeichnen. Das besagen diese Flags nunmal.</p>
<p>Wenn z.B. die einzelnen Fenster Anhand der Größe neu angepasst werden macht dies auch Sinn.</p>
<p>Wenn Dir das nicht passt, lass diese Flags weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1570773</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1570773</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Mon, 25 Aug 2008 06:11:45 GMT</pubDate></item><item><title><![CDATA[Reply to Warum bekommen meine Controls eine WM_PAINT - Message? on Mon, 25 Aug 2008 07:48:23 GMT]]></title><description><![CDATA[<p>Martin Richter schrieb:</p>
<blockquote>
<p>Bei einer Größenänderung muss Windows bei gesezten CS_HREDRAW | CS_VREDRAW Flags die gesamte Fensterfläche neu zeichnen. Das besagen diese Flags nunmal.</p>
</blockquote>
<p>Ja, daß sie das besagen, ist schon klar. Trotzdem darf das ja einen Sinn machen.</p>
<p>Martin Richter schrieb:</p>
<blockquote>
<p>Wenn z.B. die einzelnen Fenster Anhand der Größe neu angepasst werden macht dies auch Sinn.</p>
</blockquote>
<p>Aber wenn ich die einzelnen Fenster zB via MoveWindow anpasse, werden sie doch sowieso neu gemalt?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1570823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1570823</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Mon, 25 Aug 2008 07:48:23 GMT</pubDate></item><item><title><![CDATA[Reply to Warum bekommen meine Controls eine WM_PAINT - Message? on Mon, 25 Aug 2008 07:52:25 GMT]]></title><description><![CDATA[<p>Mhm, okay, ich könnte sie bei WM_PAINT natürlich anpassen, OHNE auf das WM_SIZE für das MainWindow explizit zu reagieren ...</p>
<p>Ich denke, damit ist meine Frage beantwortet.</p>
<p>Vielen Dank an alle!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1570827</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1570827</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Mon, 25 Aug 2008 07:52:25 GMT</pubDate></item><item><title><![CDATA[Reply to Warum bekommen meine Controls eine WM_PAINT - Message? on Mon, 25 Aug 2008 08:30:37 GMT]]></title><description><![CDATA[<p>Belli schrieb:</p>
<blockquote>
<p>Aber wenn ich die einzelnen Fenster zB via MoveWindow anpasse, werden sie doch sowieso neu gemalt?!</p>
</blockquote>
<p>Nein! Selbes Problem. Wenn sich nur die Positon ändert nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1570845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1570845</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Mon, 25 Aug 2008 08:30:37 GMT</pubDate></item></channel></rss>