<?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[The one and only &#x27;WndProc&#x27; ?]]></title><description><![CDATA[<p>Morgen Zusammen,</p>
<p>jetzt mal ne blöde Frage von mir an der Stelle:<br />
Wenn ich ein Fenster erstelle, so brauche ich dazu erst einmal eine Fensterklasse, die ich z.B. per RegisterClassEx registriere. Der WNDCLASSEX-Struktur übergebe ich dabei ja einen Zeiger auf meine eigene Fensterprozedur (WndProc), in der ich dann empfangene Nachrichten über einen switch-case Block auswerten und darauf reageren kann. Soweit klar.</p>
<p>Wenn ich jetzt ein neues Steuerelement, sagen wir mal, einen Button auf dem gerade zuvor erstellten Fenster erstelle - dann handelt es sich dabei doch um ein eigenständiges Fenster (Child-Window), das in mein Fenster quasi eingepflanzt wurde. Hat dieser Button jetzt seine eigene 'WndProc' ? Oder werden auch die Nachrichten an den Button durch &quot;meine&quot; WndProc, gejagt ? (inklusive die Nachrichten für 'neu zeichnen', etc.)</p>
<p>Und wenn, dann ist doch 'Subclassing' nur bei fremden Applikationen sinnvoll, die man 'fernsteuern' will, oder ? Ich meine, wenn das Fenster bereits zu meiner Applikation gehört, dann habe ich doch sowieso Zugriff auf die WndProc.</p>
<p>Grüße, Xzi-bit</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/200393/the-one-and-only-wndproc</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Apr 2026 14:27:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/200393.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 14 Dec 2007 09:45:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to The one and only &#x27;WndProc&#x27; ? on Fri, 14 Dec 2007 09:45:24 GMT]]></title><description><![CDATA[<p>Morgen Zusammen,</p>
<p>jetzt mal ne blöde Frage von mir an der Stelle:<br />
Wenn ich ein Fenster erstelle, so brauche ich dazu erst einmal eine Fensterklasse, die ich z.B. per RegisterClassEx registriere. Der WNDCLASSEX-Struktur übergebe ich dabei ja einen Zeiger auf meine eigene Fensterprozedur (WndProc), in der ich dann empfangene Nachrichten über einen switch-case Block auswerten und darauf reageren kann. Soweit klar.</p>
<p>Wenn ich jetzt ein neues Steuerelement, sagen wir mal, einen Button auf dem gerade zuvor erstellten Fenster erstelle - dann handelt es sich dabei doch um ein eigenständiges Fenster (Child-Window), das in mein Fenster quasi eingepflanzt wurde. Hat dieser Button jetzt seine eigene 'WndProc' ? Oder werden auch die Nachrichten an den Button durch &quot;meine&quot; WndProc, gejagt ? (inklusive die Nachrichten für 'neu zeichnen', etc.)</p>
<p>Und wenn, dann ist doch 'Subclassing' nur bei fremden Applikationen sinnvoll, die man 'fernsteuern' will, oder ? Ich meine, wenn das Fenster bereits zu meiner Applikation gehört, dann habe ich doch sowieso Zugriff auf die WndProc.</p>
<p>Grüße, Xzi-bit</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1420373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1420373</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 14 Dec 2007 09:45:24 GMT</pubDate></item><item><title><![CDATA[Reply to The one and only &#x27;WndProc&#x27; ? on Fri, 14 Dec 2007 09:58:35 GMT]]></title><description><![CDATA[<p>jedes fenster hat eigene prozedur<br />
fuer ein button zb ware im paint das zeichnen des textes, farbverlauf usw, das hast du in deiner main prozedur nicht da sich jedes fenster um sich selber kuemmert<br />
subclassing lohnt sich immer dann wenn du an eine message willst welche nicht ans parent weiter geleitet wird</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1420387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1420387</guid><dc:creator><![CDATA[EXDW]]></dc:creator><pubDate>Fri, 14 Dec 2007 09:58:35 GMT</pubDate></item><item><title><![CDATA[Reply to The one and only &#x27;WndProc&#x27; ? on Fri, 14 Dec 2007 14:31:43 GMT]]></title><description><![CDATA[<p>Ah, super ! Danke, Mr Evil <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1420567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1420567</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 14 Dec 2007 14:31:43 GMT</pubDate></item><item><title><![CDATA[Reply to The one and only &#x27;WndProc&#x27; ? on Sun, 16 Dec 2007 20:00:21 GMT]]></title><description><![CDATA[<p>Xzibit schrieb:</p>
<blockquote>
<p>Morgen Zusammen,</p>
<p>jetzt mal ne blöde Frage von mir an der Stelle:<br />
Wenn ich ein Fenster erstelle, so brauche ich dazu erst einmal eine Fensterklasse, die ich z.B. per RegisterClassEx registriere. Der WNDCLASSEX-Struktur übergebe ich dabei ja einen Zeiger auf meine eigene Fensterprozedur (WndProc), in der ich dann empfangene Nachrichten über einen switch-case Block auswerten und darauf reageren kann. Soweit klar.</p>
<p>Wenn ich jetzt ein neues Steuerelement, sagen wir mal, einen Button auf dem gerade zuvor erstellten Fenster erstelle - dann handelt es sich dabei doch um ein eigenständiges Fenster (Child-Window), das in mein Fenster quasi eingepflanzt wurde. Hat dieser Button jetzt seine eigene 'WndProc' ? Oder werden auch die Nachrichten an den Button durch &quot;meine&quot; WndProc, gejagt ? (inklusive die Nachrichten für 'neu zeichnen', etc.)</p>
<p>Und wenn, dann ist doch 'Subclassing' nur bei fremden Applikationen sinnvoll, die man 'fernsteuern' will, oder ? Ich meine, wenn das Fenster bereits zu meiner Applikation gehört, dann habe ich doch sowieso Zugriff auf die WndProc.</p>
<p>Grüße, Xzi-bit</p>
</blockquote>
<p>Nein so ist das nicht. Wenn du eine Fenster als Child definierst dann ist es eben das &quot;Kind&quot; deines Fensters und wenn du auf das Buttonfenster klickst dann wird die Windowsmessage <strong>WM_COMMAND</strong> versendet die wird aber an den Parenthandle also in deinem fall wahrscheinlich hWnd versendet. Dieses <strong>WM_COMMAND</strong> wird dann auch von der <strong>Botschaftsverarbeitung(WndProc)</strong> deines Fensters angenommen weil das Child ja alle Botschaften an sein ParentHandle sendet. Übrigens wenn du dann noch herausfinden auf welches Buttonfenster geklickt wurde: <strong>lParam</strong> übergibt dies.</p>
<p><strong>Zusammenfassung: Ein Child sendet alle seinen empfangenen Botschaften an seinen Parent und damit an sein WndProc. Diese Botschaft lautet WM_COMMAND.</strong></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1421614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1421614</guid><dc:creator><![CDATA[C-Chris]]></dc:creator><pubDate>Sun, 16 Dec 2007 20:00:21 GMT</pubDate></item><item><title><![CDATA[Reply to The one and only &#x27;WndProc&#x27; ? on Sun, 16 Dec 2007 21:32:46 GMT]]></title><description><![CDATA[<p>C-Chris schrieb:</p>
<blockquote>
<p><strong>Zusammenfassung: Ein Child sendet alle seinen empfangenen Botschaften an seinen Parent und damit an sein WndProc. Diese Botschaft lautet WM_COMMAND.</strong></p>
</blockquote>
<p>Nein, das ist quatsch! Ein Button wird beispielsweise durch die Nachricht WM_PAINT neugezeichnet. Diese Nachricht bekommt Dein Parent niemals zusehen (also die WM_PAIN-Nachrichten, die für den Button bestimmt sind. Solche, die das Neuzeichnen, des Parents selbst regeln, kommen selbstverständlich an, aber die haben ja nichts mit dem Button zu tun -ich wiederhole mich-). Eine gewissen Ausnahme bildet der Sonderfall 'WM_PARENTNOTIFY' (siehe: <a href="http://msdn2.microsoft.com/en-us/library/ms632638.aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/ms632638.aspx</a>). Wobei dieses Style-Flag auch erst explizit gesetzt werden muss und auch dann nur für einen Bruchteil aller Fensternachrichten gilt. WM_COMMAND wird nur aufgrund bestimmter Benutzerereignisse gesendet (siehe MSDN).</p>
<p><strong>Zusammenfassung:</strong> Jedes vordefinierte Control hat eine vom System definierte WndProc. Diese arbeitet für jeden Button die anfallenden Nachrichten nach einem Standard-Muster ab. Will man dieses Muster ändern, muss man subclassen (mal abgesehen, von den wenigen anderen Modifikationsmöglichkeiten wie WM_SETFONT).</p>
<p><strong>Ergänzung:</strong> Besonder deutlich wird dieses Prinzip durch die Funktion DefWindowProc(...), die nicht bearbeitete Nachrichten eines Fenster ebenfalls durch eine Standard-Behandlung bearbeitet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1421672</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1421672</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Sun, 16 Dec 2007 21:32:46 GMT</pubDate></item><item><title><![CDATA[Reply to The one and only &#x27;WndProc&#x27; ? on Tue, 18 Dec 2007 09:53:56 GMT]]></title><description><![CDATA[<p>CodeFinder schrieb:</p>
<blockquote>
<p>C-Chris schrieb:</p>
<blockquote>
<p><strong>Zusammenfassung: Ein Child sendet alle seinen empfangenen Botschaften an seinen Parent und damit an sein WndProc. Diese Botschaft lautet WM_COMMAND.</strong></p>
</blockquote>
<p>Nein, das ist quatsch! Ein Button wird beispielsweise durch die Nachricht WM_PAINT neugezeichnet. Diese Nachricht bekommt Dein Parent niemals zusehen (also die WM_PAIN-Nachrichten, die für den Button bestimmt sind. Solche, die das Neuzeichnen, des Parents selbst regeln, kommen selbstverständlich an, aber die haben ja nichts mit dem Button zu tun -ich wiederhole mich-). Eine gewissen Ausnahme bildet der Sonderfall 'WM_PARENTNOTIFY' (siehe: <a href="http://msdn2.microsoft.com/en-us/library/ms632638.aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/ms632638.aspx</a>). Wobei dieses Style-Flag auch erst explizit gesetzt werden muss und auch dann nur für einen Bruchteil aller Fensternachrichten gilt. WM_COMMAND wird nur aufgrund bestimmter Benutzerereignisse gesendet (siehe MSDN).</p>
<p><strong>Zusammenfassung:</strong> Jedes vordefinierte Control hat eine vom System definierte WndProc. Diese arbeitet für jeden Button die anfallenden Nachrichten nach einem Standard-Muster ab. Will man dieses Muster ändern, muss man subclassen (mal abgesehen, von den wenigen anderen Modifikationsmöglichkeiten wie WM_SETFONT).</p>
<p><strong>Ergänzung:</strong> Besonder deutlich wird dieses Prinzip durch die Funktion DefWindowProc(...), die nicht bearbeitete Nachrichten eines Fenster ebenfalls durch eine Standard-Behandlung bearbeitet.</p>
</blockquote>
<p>Aha.<br />
Mobbing.<br />
Aha.<br />
Doch kein Mobbing.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1421997</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1421997</guid><dc:creator><![CDATA[C-Chris]]></dc:creator><pubDate>Tue, 18 Dec 2007 09:53:56 GMT</pubDate></item><item><title><![CDATA[Reply to The one and only &#x27;WndProc&#x27; ? on Tue, 18 Dec 2007 09:54:36 GMT]]></title><description><![CDATA[<p>Wenn jedes Childwindow seine eigne Meldungsverarbeitungschleife hat wie ist es dann möglich dass der Parent WM_COMMAND erhält? Du behauptest (was wahrscheinlich auch richtig) ist dass jedes Fenster seine eigne Botschaftsverarbeitung hat(eine von Windows generierte) aber wieso erhaltet den dann mein Hauptfenster dieses WM_COMMAND ???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1422004</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1422004</guid><dc:creator><![CDATA[C-Chris]]></dc:creator><pubDate>Tue, 18 Dec 2007 09:54:36 GMT</pubDate></item><item><title><![CDATA[Reply to The one and only &#x27;WndProc&#x27; ? on Mon, 17 Dec 2007 14:36:20 GMT]]></title><description><![CDATA[<p>Das Dialogfenster verarbeitet die Nachrichten (WM_KEYDOWN, WM_MOUSEMOVE und ähnliche) selber - als Resultat kann es durchaus eigene Nachrichten wie WM_COMMAND weiterschicken.</p>
<p>PS: Bitte nicht schreien, damit machst du dich nur unbeliebt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1422012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1422012</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 17 Dec 2007 14:36:20 GMT</pubDate></item><item><title><![CDATA[Reply to The one and only &#x27;WndProc&#x27; ? on Mon, 17 Dec 2007 14:39:36 GMT]]></title><description><![CDATA[<p>japs, genau, bin direkt beleidigt #gg</p>
<p>stell dir vor ein button wuerde das klick nicht selber verarbeiten, muesste der parent dann sagen &quot;zeichne dich gedrueckt, zeichne ein rahmen, blinke noch n bissl rum, zeichne nicht gedrueckt&quot; #gg</p>
<p>jede aktion eines fensters {auch wenns nur ne mausbewegung darueber ist {da es dann neu gezeichnet werden muss} oder ein focus wechsel, behandelt jedes fenster fuer sich, und sended bei bedarf {zb bei einem klick} eine message an das parent</p>
<p>this-&gt;GetParent()-&gt;SendMessage(WM_CLICK, MyId, lParam); usw usw</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1422019</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1422019</guid><dc:creator><![CDATA[EXDW]]></dc:creator><pubDate>Mon, 17 Dec 2007 14:39:36 GMT</pubDate></item><item><title><![CDATA[Reply to The one and only &#x27;WndProc&#x27; ? on Mon, 17 Dec 2007 15:02:57 GMT]]></title><description><![CDATA[<p>C-Chris schrieb:</p>
<blockquote>
<p><strong>Wenn jedes Childwindow seine eigne Meldungsverarbeitungschleife hat wie ist es dann möglich dass der Parent WM_COMMAND erhält? Du behauptest (was wahrscheinlich auch richtig) ist dass jedes Fenster seine eigne Botschaftsverarbeitung hat(eine von Windows generierte) aber wieso erhaltet den dann mein Hauptfenster dieses WM_COMMAND ???</strong></p>
</blockquote>
<p>Weil zur Standardprozedur der ChildWindows eben der Befehl &quot;SendMessage (hParent, WM_COMMAND)&quot; (oder so ähnlich) gehört.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1422039</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1422039</guid><dc:creator><![CDATA[Elektronix]]></dc:creator><pubDate>Mon, 17 Dec 2007 15:02:57 GMT</pubDate></item><item><title><![CDATA[Reply to The one and only &#x27;WndProc&#x27; ? on Mon, 17 Dec 2007 21:42:16 GMT]]></title><description><![CDATA[<blockquote>
<p>jedes fenster hat eigene prozedur</p>
</blockquote>
<p>Jungs, jetzt mal ne' ganz andere Frage dazu:<br />
Wenn schon jedes Fenster (Button, TreeView, Liste, etc.) eine eigene Prozedur hat, wie heißt denn die z.B. standardmäßig beim Button ?<br />
Ich meine - wenn ich gerade keinen Bock darauf habe für MEIN Fenster eine Nachricht zu implementieren, so kann ich einfach DefWindowProc() aufrufen.<br />
Aber wie heißt die Funktion unter Windows, die für meinen Button die Nachrichtenbehandlung standardmäßig durchführt ? Hat da jemand eine Ahnung von ?</p>
<p>Greetings, Xzi-bit</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1422308</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1422308</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 17 Dec 2007 21:42:16 GMT</pubDate></item><item><title><![CDATA[Reply to The one and only &#x27;WndProc&#x27; ? on Mon, 17 Dec 2007 21:56:57 GMT]]></title><description><![CDATA[<p>Das &quot;Pendant&quot; zu DefWindowProc () heißt CallWindowProc (). Den &quot;pPrevWndFunc&quot; erhält man z.B. durch GetClassInfoEx (...,&quot;BUTTON&quot;,...).<br />
Der Einsatz dieser Funktionen ist aber nur sinnvoll wenn der Button gesub- oder superclassed wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1422313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1422313</guid><dc:creator><![CDATA[fensterrufer]]></dc:creator><pubDate>Mon, 17 Dec 2007 21:56:57 GMT</pubDate></item><item><title><![CDATA[Reply to The one and only &#x27;WndProc&#x27; ? on Mon, 17 Dec 2007 22:08:41 GMT]]></title><description><![CDATA[<p>Ok, danke. Ich hab übrigens die zugehörigen internen Windows-Funktionsnamen gefunden. Die Windows-interne 'WndProc' für einen Button lautet 'ButtonWndProc', die für eine CheckListe 'CheckListWndProc', usw. usf.</p>
<p>Danke an Alle nochmals</p>
<p>Greetings, Xzi-bit</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1422317</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1422317</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 17 Dec 2007 22:08:41 GMT</pubDate></item><item><title><![CDATA[Reply to The one and only &#x27;WndProc&#x27; ? on Tue, 18 Dec 2007 09:55:25 GMT]]></title><description><![CDATA[<p>Mr Evil schrieb:</p>
<blockquote>
<p>japs, genau, bin direkt beleidigt #gg</p>
<p>stell dir vor ein button wuerde das klick nicht selber verarbeiten, muesste der parent dann sagen &quot;zeichne dich gedrueckt, zeichne ein rahmen, blinke noch n bissl rum, zeichne nicht gedrueckt&quot; #gg</p>
<p>jede aktion eines fensters {auch wenns nur ne mausbewegung darueber ist {da es dann neu gezeichnet werden muss} oder ein focus wechsel, behandelt jedes fenster fuer sich, und sended bei bedarf {zb bei einem klick} eine message an das parent</p>
<p>this-&gt;GetParent()-&gt;SendMessage(WM_CLICK, MyId, lParam); usw usw</p>
</blockquote>
<p>Tut mir direkt Leid. Habe es rückgäning gemacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1422444</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1422444</guid><dc:creator><![CDATA[C-Chris]]></dc:creator><pubDate>Tue, 18 Dec 2007 09:55:25 GMT</pubDate></item><item><title><![CDATA[Reply to The one and only &#x27;WndProc&#x27; ? on Tue, 18 Dec 2007 09:58:11 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Das Dialogfenster verarbeitet die Nachrichten (WM_KEYDOWN, WM_MOUSEMOVE und ähnliche) selber - als Resultat kann es durchaus eigene Nachrichten wie WM_COMMAND weiterschicken.</p>
<p>PS: Bitte nicht schreien, damit machst du dich nur unbeliebt.</p>
</blockquote>
<p>Dann hat mein Buch wohl doch nicht gelogen. Dann ist das garkein so grosser &quot;Quatsch&quot;.</p>
<p>Zum &quot;schreien&quot;: Hat aufgehört-</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1422446</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1422446</guid><dc:creator><![CDATA[C-Chris]]></dc:creator><pubDate>Tue, 18 Dec 2007 09:58:11 GMT</pubDate></item><item><title><![CDATA[Reply to The one and only &#x27;WndProc&#x27; ? on Tue, 18 Dec 2007 13:40:04 GMT]]></title><description><![CDATA[<p>Mr Evil schrieb:</p>
<blockquote>
<p>jedes fenster hat eigene prozedur<br />
fuer ein button zb ware im paint das zeichnen des textes, farbverlauf usw, das hast du in deiner main prozedur nicht da sich jedes fenster um sich selber kuemmert<br />
subclassing lohnt sich immer dann wenn du an eine message willst welche nicht ans parent weiter geleitet wird</p>
</blockquote>
<p>Mr Evil hat ausserdem auch gesagt dass die Botschaften an den Parent weitergeleitet werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1422588</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1422588</guid><dc:creator><![CDATA[C-Chris]]></dc:creator><pubDate>Tue, 18 Dec 2007 13:40:04 GMT</pubDate></item></channel></rss>