<?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[MessageSwitch in der WndProc verteilen...]]></title><description><![CDATA[<p>Hi, hab n größeres Programm geschrieben, und wollte mal fragen wie das ein bissl entzerren kann... Der Quellcode in der Main.cpp (enthält 'nur' WinMain und WndProc) ist schon ellen lang....hab fast kein Überblick mehr,...hat einer ne Idee wie ich das n bissl verteilen kann (auf andere Dateien) ? Das Problem ist nämlich bspw:<br />
Wenn ich Bei jeder Nachricht eine Funktion aufrufe, die dann die Bearbeitung durchführt...also z.B.:</p>
<pre><code class="language-cpp">// in der WndProc des Hauptfensters
// ...
case WM_COMMAND:
   OnMsgWmCommand(wParam, lParam);
   break;
// ...
</code></pre>
<p>benötige ich in dieser Funktion seeehr viele Variablen, die in anderen Funktionen auch benötigt werden...daher müsste ich unzählige globale (+ externe) Variablen deklarieren...das ist -wie ich finde- sehr unschön... <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="😞"
    /><br />
Hoffe ihr versteht mein Problem... <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>
<p>Danke schon mal für Tipps/Hilfe! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/150126/messageswitch-in-der-wndproc-verteilen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 20 Jul 2026 10:55:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/150126.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 13 Jun 2006 12:26:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to MessageSwitch in der WndProc verteilen... on Tue, 13 Jun 2006 12:26:22 GMT]]></title><description><![CDATA[<p>Hi, hab n größeres Programm geschrieben, und wollte mal fragen wie das ein bissl entzerren kann... Der Quellcode in der Main.cpp (enthält 'nur' WinMain und WndProc) ist schon ellen lang....hab fast kein Überblick mehr,...hat einer ne Idee wie ich das n bissl verteilen kann (auf andere Dateien) ? Das Problem ist nämlich bspw:<br />
Wenn ich Bei jeder Nachricht eine Funktion aufrufe, die dann die Bearbeitung durchführt...also z.B.:</p>
<pre><code class="language-cpp">// in der WndProc des Hauptfensters
// ...
case WM_COMMAND:
   OnMsgWmCommand(wParam, lParam);
   break;
// ...
</code></pre>
<p>benötige ich in dieser Funktion seeehr viele Variablen, die in anderen Funktionen auch benötigt werden...daher müsste ich unzählige globale (+ externe) Variablen deklarieren...das ist -wie ich finde- sehr unschön... <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="😞"
    /><br />
Hoffe ihr versteht mein Problem... <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>
<p>Danke schon mal für Tipps/Hilfe! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1076854</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1076854</guid><dc:creator><![CDATA[Cooly]]></dc:creator><pubDate>Tue, 13 Jun 2006 12:26:22 GMT</pubDate></item><item><title><![CDATA[Reply to MessageSwitch in der WndProc verteilen... on Tue, 13 Jun 2006 14:45:03 GMT]]></title><description><![CDATA[<p><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>
<p>keine Ideen <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="😞"
    /> <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1076947</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1076947</guid><dc:creator><![CDATA[Cooly]]></dc:creator><pubDate>Tue, 13 Jun 2006 14:45:03 GMT</pubDate></item><item><title><![CDATA[Reply to MessageSwitch in der WndProc verteilen... on Tue, 13 Jun 2006 14:54:29 GMT]]></title><description><![CDATA[<p>Du brauchst nur eine Struktur/Klasse und SetWindowLongPtr/GetWindowLongPtr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1076958</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1076958</guid><dc:creator><![CDATA[........]]></dc:creator><pubDate>Tue, 13 Jun 2006 14:54:29 GMT</pubDate></item><item><title><![CDATA[Reply to MessageSwitch in der WndProc verteilen... on Tue, 13 Jun 2006 14:57:15 GMT]]></title><description><![CDATA[<p>Erstmal danke für Antwort...scheint ja als könnte sich keiner herablassen zu antworten <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="😃"
    /> oder die haben alle kein Plan <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>
<blockquote>
<p>Du brauchst nur eine Struktur/Klasse und SetWindowLongPtr/GetWindowLongPtr.</p>
</blockquote>
<p>hmm und dann über GWL_USERDATA ? ...naja aber das ändert doch nix <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/1076959</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1076959</guid><dc:creator><![CDATA[Cooly]]></dc:creator><pubDate>Tue, 13 Jun 2006 14:57:15 GMT</pubDate></item><item><title><![CDATA[Reply to MessageSwitch in der WndProc verteilen... on Tue, 13 Jun 2006 14:58:45 GMT]]></title><description><![CDATA[<p>Vielleicht ist Deine Frage einfach zu &quot;ungenau&quot;?<br />
Was hast Du denn genau für ein Problem. Ein Fenster mit einer WndProc? Oder 100 Fenster mit einer WndProc?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1076960</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1076960</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Tue, 13 Jun 2006 14:58:45 GMT</pubDate></item><item><title><![CDATA[Reply to MessageSwitch in der WndProc verteilen... on Tue, 13 Jun 2006 15:40:05 GMT]]></title><description><![CDATA[<p>Ich glaub er hat die Antwort (bzw. das Konzept dahinter) nicht verstanden<br />
1. Datei: Basisklasse mit den Grundvariablen<br />
2..jeweils Ableitungen mit weiteren Variablen<br />
Hauptdatei: eine Instanz der abgeleiteten Klasse dessen Funktionen in der WndProc aufgerufen werden<br />
Wenn es nur ein Fenster ist im Notfall mit einer globalen Variable, ansonsten, wie in der ersten Antwort gedacht, dem Fenster mitgeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1076992</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1076992</guid><dc:creator><![CDATA[Lui]]></dc:creator><pubDate>Tue, 13 Jun 2006 15:40:05 GMT</pubDate></item><item><title><![CDATA[Reply to MessageSwitch in der WndProc verteilen... on Tue, 13 Jun 2006 16:40:33 GMT]]></title><description><![CDATA[<p>hi zusammen,<br />
also das:</p>
<p>Lui schrieb:</p>
<blockquote>
<p>Ich glaub er hat die Antwort (bzw. das Konzept dahinter) nicht verstanden<br />
1. Datei: Basisklasse mit den Grundvariablen<br />
2..jeweils Ableitungen mit weiteren Variablen<br />
Hauptdatei: eine Instanz der abgeleiteten Klasse dessen Funktionen in der WndProc aufgerufen werden<br />
Wenn es nur ein Fenster ist im Notfall mit einer globalen Variable, ansonsten, wie in der ersten Antwort gedacht, dem Fenster mitgeben.</p>
</blockquote>
<p>bestätigt wohl das:</p>
<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>Vielleicht ist Deine Frage einfach zu &quot;ungenau&quot;?<br />
Was hast Du denn genau für ein Problem. Ein Fenster mit einer WndProc? Oder 100 Fenster mit einer WndProc?</p>
</blockquote>
<p>hab meine Frage wohl wirklich zu ungenau gestellt. -sry-</p>
<p>Also noch n paar Infos:<br />
- <strong>Ein</strong> Fenster, <strong>eine</strong> WndProc<br />
- dieses Fenster beinhaltet (bzw. erstellt unter WM_CREATE) <strong>einige</strong> Controls, somit wird<br />
vllt. schon deutlich, dass das Programm viele Benutzerbefehle verarbeiten muss.<br />
- weiterhin hab ich auch bspw. Drag&amp;Drop Support, Aufruf über die Befehlszeile usw./usf.<br />
implementiert...<br />
daraus resultiert jetzt ein <strong>sehr</strong> großes switch (für die WindowMessages), da es einerseits sehr <strong>viele verschiedene Nachrichten</strong> gibt und andererseits ist jeder einzelne <strong>Case-Zweig sehr groß</strong> <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="😮"
    /></p>
<p>Ein Pseudobeispiel:</p>
<pre><code class="language-cpp">LRESULT CALLBACK WndProc(HWND hWnd, UINT uiMessage, WPARAM wParam, LPARAM lParam)
{
    switch(uiMessage)
    {
        case WM_CREATE:
            // Controls erstellen, Initialisierungen etc. ...
            // ...
            // ...
            // ...
            break;

        case WM_COMMAND:
            // GROßES switch für die ganzen ID's ... 
            // entsprechend große case-Zweige, kommt auf
            // Komplexität der jeweiligen Funktion des Controls an.
            // ...
            // ...
            // ...
            break;

// Hier kommen noch viele weitere Messages
// ...
// ...
// ...

        default:
            return (DefWindowProc(...));
    }
    return (0L);
}
</code></pre>
<p>Wie jetzt hoffentlich deutlich, wird die WndProc riesen groß, dabei verliert man schnell den Überblick, sinnvoll wäre es also einen Teil des Code auszulagern (wie auch immer...das is ja meine Frage?! <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="😉"
    /> ...z.B. in: Funktionen bzw. neue Cpp-Dateien).<br />
Das Problem hierbei nur:</p>
<p>Cooly schrieb:</p>
<blockquote>
<p>Wenn ich Bei jeder Nachricht eine Funktion aufrufe, die dann die Bearbeitung durchführt...also z.B.:</p>
<pre><code class="language-cpp">// in der WndProc des Hauptfensters
// ...
case WM_COMMAND:
   OnMsgWmCommand(wParam, lParam);
   break;
// ...
</code></pre>
<p>benötige ich in dieser Funktion seeehr viele Variablen, die in anderen Funktionen auch benötigt werden...daher müsste ich unzählige globale (+ externe) Variablen deklarieren...das ist -wie ich finde- sehr unschön... <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="😞"
    /><br />
Hoffe ihr versteht mein Problem... <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>
</blockquote>
<p>So wenn das auch noch ungenau ist, dann lasst es mich wissen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> und sry nochmal für die ungenaue Erklärung anfangs <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1077029</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1077029</guid><dc:creator><![CDATA[Cooly]]></dc:creator><pubDate>Tue, 13 Jun 2006 16:40:33 GMT</pubDate></item><item><title><![CDATA[Reply to MessageSwitch in der WndProc verteilen... on Wed, 14 Jun 2006 08:09:11 GMT]]></title><description><![CDATA[<p>Wo sind die Variablen denn jetzt? static in der WndProc oder was? Wenn du so viel kram brauchst, mach halt eine Struktur in der alles drin ist, dann ist es nur noch ein parameter oder 1 globale variable.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1077338</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1077338</guid><dc:creator><![CDATA[toleron]]></dc:creator><pubDate>Wed, 14 Jun 2006 08:09:11 GMT</pubDate></item><item><title><![CDATA[Reply to MessageSwitch in der WndProc verteilen... on Wed, 14 Jun 2006 09:26:10 GMT]]></title><description><![CDATA[<p>toleron schrieb:</p>
<blockquote>
<p>Wo sind die Variablen denn jetzt?</p>
</blockquote>
<p>alle global...sind sehr viele...aber im struct...naja dann übergeb ich immer alle vars, obwohl ich nur n 1/4 gerade mal brauch <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/1077416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1077416</guid><dc:creator><![CDATA[Cooly]]></dc:creator><pubDate>Wed, 14 Jun 2006 09:26:10 GMT</pubDate></item><item><title><![CDATA[Reply to MessageSwitch in der WndProc verteilen... on Wed, 14 Jun 2006 10:19:29 GMT]]></title><description><![CDATA[<p>anders gehts nicht. entweder so oder du überlegst mal ob du dein ganzes programm nicht besser strukturieren kannst. wenn du zig globale variablen hast ist das generell schon mal nicht so toll. lässt sich sicherlich irgendwie besser lösen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1077454</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1077454</guid><dc:creator><![CDATA[toleron]]></dc:creator><pubDate>Wed, 14 Jun 2006 10:19:29 GMT</pubDate></item><item><title><![CDATA[Reply to MessageSwitch in der WndProc verteilen... on Wed, 14 Jun 2006 11:34:32 GMT]]></title><description><![CDATA[<blockquote>
<p>wenn du zig globale variablen hast ist das generell schon mal nicht so toll. lässt sich sicherlich irgendwie besser lösen.</p>
</blockquote>
<p>ichw eiß ...globale Vars sind nit dolle...aber die hab auch nur gemacht, weil ich für meine MsgHandling Routinen eingies an Daten bereitstellen musste, und das mit Parametern zu machen wär wahnsinn...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1077517</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1077517</guid><dc:creator><![CDATA[Cooly]]></dc:creator><pubDate>Wed, 14 Jun 2006 11:34:32 GMT</pubDate></item></channel></rss>