<?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[mal wieder wndproc und WM_SIZE]]></title><description><![CDATA[<p>Hi</p>
<p>Habe nun folgendes Problem:</p>
<p>Ganz simples win32 setup:</p>
<pre><code class="language-cpp">//...
while(PeekMessage(&amp;msg, NULL, 0, 0, PM_REMOVE))
   {
   if(msg.message == (WM_SIZE + WM_USER))
     std::cout &lt;&lt; &quot;&lt;user defined&gt;&quot; &lt;&lt; msg &lt;&lt; std::endl;
   TranslateMessage(&amp;msg);
   DispatchMessage(&amp;msg);
   }
// ...

//...
//wndproc
//...
switch(msg_)
   {
	// hier nochmal explizit dargestellt
   case WM_SIZE:
	   PostMessage(hWnd_, msg_ + WM_USER, wParam_, lParam_);
	default:
	   PostMessage(hWnd_, msg_ + WM_USER, wParam_, lParam_);
   }
//...
</code></pre>
<p>... so ungefähr sieht's aus. Das Problem ist, das PostMessage die Nachricht<br />
msg + WM_USER _nicht_ in die queue stellt, wenn msg == WM_SIZE ist. Das event<br />
(msg + WM_USER, also WM_SIZE+WM_USER) wird durch PostMessage (scheinbar) sofort<br />
an die WndProc geschickt, so das ich's nicht per PeekMessage abfangen kann...</p>
<p>Hat jemand eine Erklärung für das Verhalten?<br />
Andere events werden anstandslos in die queue eingefügt,... komisch. <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>c ya, cPanther</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/221295/mal-wieder-wndproc-und-wm_size</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 05:46:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/221295.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 27 Aug 2008 13:39:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to mal wieder wndproc und WM_SIZE on Wed, 27 Aug 2008 13:39:09 GMT]]></title><description><![CDATA[<p>Hi</p>
<p>Habe nun folgendes Problem:</p>
<p>Ganz simples win32 setup:</p>
<pre><code class="language-cpp">//...
while(PeekMessage(&amp;msg, NULL, 0, 0, PM_REMOVE))
   {
   if(msg.message == (WM_SIZE + WM_USER))
     std::cout &lt;&lt; &quot;&lt;user defined&gt;&quot; &lt;&lt; msg &lt;&lt; std::endl;
   TranslateMessage(&amp;msg);
   DispatchMessage(&amp;msg);
   }
// ...

//...
//wndproc
//...
switch(msg_)
   {
	// hier nochmal explizit dargestellt
   case WM_SIZE:
	   PostMessage(hWnd_, msg_ + WM_USER, wParam_, lParam_);
	default:
	   PostMessage(hWnd_, msg_ + WM_USER, wParam_, lParam_);
   }
//...
</code></pre>
<p>... so ungefähr sieht's aus. Das Problem ist, das PostMessage die Nachricht<br />
msg + WM_USER _nicht_ in die queue stellt, wenn msg == WM_SIZE ist. Das event<br />
(msg + WM_USER, also WM_SIZE+WM_USER) wird durch PostMessage (scheinbar) sofort<br />
an die WndProc geschickt, so das ich's nicht per PeekMessage abfangen kann...</p>
<p>Hat jemand eine Erklärung für das Verhalten?<br />
Andere events werden anstandslos in die queue eingefügt,... komisch. <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>c ya, cPanther</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1572259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1572259</guid><dc:creator><![CDATA[ajcPanther]]></dc:creator><pubDate>Wed, 27 Aug 2008 13:39:09 GMT</pubDate></item><item><title><![CDATA[Reply to mal wieder wndproc und WM_SIZE on Wed, 27 Aug 2008 13:45:15 GMT]]></title><description><![CDATA[<p>Die Erklärung ist eigentlich so einfach wie nicht-hilfreich: Weil Windows es so will.</p>
<p>Für selbstdefinierte Nachrichten sollte man nicht WM-Nachrichten addieren. Du weißt ja nicht, welche Nachrichten-ID dabei herauskommt (außer, Du frickelst die winuser.h durch). Für eigene Nachrichten sollten immer jeweilige Konstanten verwendet werden, z. B. WM_OWN = WM_USER + 1</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1572267</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1572267</guid><dc:creator><![CDATA[Elektronix]]></dc:creator><pubDate>Wed, 27 Aug 2008 13:45:15 GMT</pubDate></item><item><title><![CDATA[Reply to mal wieder wndproc und WM_SIZE on Wed, 27 Aug 2008 13:53:23 GMT]]></title><description><![CDATA[<p>mh, per definition sollte aber WM_MSG + WM_USER immer &gt; WM_USER und &lt; 0x7fff sein. Zumindest ist's so im SDK beschrieben...</p>
<p>Also, im endeffekt heisst's, PostMessage macht schlicht mehr als nur die queue zu befüllen...<br />
Na toll.. <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>c ya, cPanther</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1572275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1572275</guid><dc:creator><![CDATA[ajcPanther]]></dc:creator><pubDate>Wed, 27 Aug 2008 13:53:23 GMT</pubDate></item><item><title><![CDATA[Reply to mal wieder wndproc und WM_SIZE on Wed, 27 Aug 2008 16:01:26 GMT]]></title><description><![CDATA[<p>Was hast Du denn erwartet? Zudem hast Du doch hier nur einen Thread. Während WM_SIZE ausgeführt wird, wird eben keine andere Nachricht aus der Queue gezogen und das ist gut so.</p>
<p>Was möchtest Du denn erreichen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1572353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1572353</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Wed, 27 Aug 2008 16:01:26 GMT</pubDate></item><item><title><![CDATA[Reply to mal wieder wndproc und WM_SIZE on Fri, 29 Aug 2008 00:18:37 GMT]]></title><description><![CDATA[<p>Hmm, normalerweise geht das schon auch mit nur einem Thread.<br />
Trotzdem ist Martins Frage berechting: wieso willst du die Ausführung verzögern?</p>
<p>Ist das der &quot;richtige&quot; Code? Was mir an dem geposteten code auffällt:</p>
<p>* keine break-statements, nach PostMessage fällt die Abarbeitung zum default-Zweig durch<br />
* kein (expliziter) handler für WM_SIZE+WM_USER<br />
* Soll die Standard-Behandlung von WM_SIZE ablaufen?</p>
<p>Ist das Control ein eigenes Fenster, oder abgeleitet / subclassing eines existierenden? (Dann wäre WM_USER falsch)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1573311</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1573311</guid><dc:creator><![CDATA[peterchen]]></dc:creator><pubDate>Fri, 29 Aug 2008 00:18:37 GMT</pubDate></item><item><title><![CDATA[Reply to mal wieder wndproc und WM_SIZE on Fri, 29 Aug 2008 08:01:13 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/4165">@peterchen</a></p>
<blockquote>
<p>* keine break-statements, nach PostMessage fällt die Abarbeitung zum default-Zweig durch<br />
* kein (expliziter) handler für WM_SIZE+WM_USER<br />
* Soll die Standard-Behandlung von WM_SIZE ablaufen?</p>
</blockquote>
<p>...ist im Original schon i.O., ganz dämlich bin ich ja nich, ... <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>
<p>siehe...</p>
<blockquote>
<p>... so ungefähr sieht's aus.</p>
</blockquote>
<p><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>
<p>Ich will die Ausführung nicht vorsätzlich verzögern, ich will nur, unabhängig von der WndProc, Nachrichten &quot;abfangen&quot; können.<br />
So wie's PeekMessage ja auch zur hälfte schon macht... zur hälfte...</p>
<p>In anderen libs ist's nochmal, events mit nur einer Funktion abzuholen<br />
(SDL_Pollevent, etc... ...)</p>
<p>zum &quot;wofür&quot;:<br />
Das ganze ist &quot;nur&quot; prototyping, halt Durchspielen aller irgend möglichen Messaging-Scenarien (auf x-platformen, z. Z. eben unter Win32)</p>
<p>c ya, cPanther</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1573389</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1573389</guid><dc:creator><![CDATA[ajcPanther]]></dc:creator><pubDate>Fri, 29 Aug 2008 08:01:13 GMT</pubDate></item><item><title><![CDATA[Reply to mal wieder wndproc und WM_SIZE on Fri, 29 Aug 2008 10:36:03 GMT]]></title><description><![CDATA[<p>Wie gesagt - sollte funktionieren (wenn du alles richtig machst :D).</p>
<p>Was fehlt denn? Die Ausschrift in der Message Loop?</p>
<blockquote>
<p>&gt; ich will nur, unabhängig von der WndProc, Nachrichten &quot;abfangen&quot; können.</p>
</blockquote>
<p>Naja, wird so nicht immer funktionieren.<br />
MessageBoxen und Modale Dialoge (außer denen der MFC/ATL) haben ihre eigene Message Loop.</p>
<p>also, ich würd' vorschlagen: eigene WNDPROC, subclassen, oder Message Hook.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1573482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1573482</guid><dc:creator><![CDATA[peterchen]]></dc:creator><pubDate>Fri, 29 Aug 2008 10:36:03 GMT</pubDate></item><item><title><![CDATA[Reply to mal wieder wndproc und WM_SIZE on Fri, 29 Aug 2008 11:09:53 GMT]]></title><description><![CDATA[<p>PeekMessage fängt keine Nachrichten ab.<br />
Nachrichten kann man per Subclassing oder per Hook abfangen.<br />
PeekMessage schaut nurin die Message Queue rein, und in der landet nur ein Bruchteil der Windows Nachrichten (Faustregel: Alles was mit Eingabe des Users zu tun hat, oder IPC).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1573519</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1573519</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Fri, 29 Aug 2008 11:09:53 GMT</pubDate></item><item><title><![CDATA[Reply to mal wieder wndproc und WM_SIZE on Fri, 29 Aug 2008 11:39:07 GMT]]></title><description><![CDATA[<p>So, hab mir grad die sources einiger anderer frameworks angschaut...<br />
dort wird alles per PeekMessage abgefangen. was dabei nicht abgefangen wird<br />
wird in eigenregie ausgelöst. (WM_PAINT != SDL::OnPaint, etc...)</p>
<p>Hm, per Subclassing hab ich ja das gleiche Problem, die Nachricht kommt in der (na gut,... in einer anderen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> ) WndProc an.<br />
Ich will aber autonom abfangen...</p>
<p>na egal, ich schau grad, inwieweit ich die WndProc auf ein entspr. interface biegen kann...</p>
<p>c ya, cPanther</p>
<p>Edit:<br />
per Hooks, darauf bin ich ja noch gar nich gekommen,... gleich mal ausprobieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1573545</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1573545</guid><dc:creator><![CDATA[ajcPanther]]></dc:creator><pubDate>Fri, 29 Aug 2008 11:39:07 GMT</pubDate></item></channel></rss>