<?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[Nachrichtenverabeitung eines Child Windows]]></title><description><![CDATA[<p>Hallo, ich hab mal ne Frage zu obigem Thema:<br />
Ich hab mir ein Fenster erstellt in das ich einen Button reingemacht hab.<br />
Nun stellt sich mir die Frage wie ich die Nachrichten abfange die an den Button gerichtet sind.<br />
Muss ich für den Button (also das Child) auch eine Fensterprocedur erzeugen?<br />
Ich hoffe mich kann jemand aufklären</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;
//#include &lt;stdio.h&gt;

// Konstanten
// ----------

// Funktionsprototyping!
// ---------------------
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg,
                         WPARAM wParam, LPARAM lParam);

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg,
                         WPARAM wParam, LPARAM lParam)
{
     switch (uMsg)
    {
    case WM_DESTROY:
        // Beim Eintreffen von WM_DESTROY, Anwendung beenden
        PostQuitMessage(0);
        return 0L;
		 case WM_CLOSE:
        {
             // Abfrage, ob Anwendung beendet werden soll
             int nRetVal = MessageBox(hWnd,
                            &quot;Soll die Anwendung beendet werden?&quot;,
                            &quot;WM_CLOSE&quot;, MB_YESNO);
             // Falls ja, Fenster zerstoeren
             if ( nRetVal == IDYES)
                 DestroyWindow(hWnd);
            return 0L;
        }

    }
		// Alles durch WINDOWS bearbeiten lassen
    return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

LPCTSTR lpszWCLASSNAME = &quot;ERSTES FENSTER&quot;;
LPCTSTR lpszTITLE = &quot;Mein erstes Fenster&quot;;

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR lpCmdLine,
                     int nCmdShow )
{
   // ZU ERLEDIGEN: Fügen Sie hier den Code ein.

    // Fensterklasse registrieren
    // --------------------------
    // WNDCLASS-Strukur
    WNDCLASSEX WndClass;
    // Struktur mit '0' vorbelegen
    memset(&amp;WndClass,0,sizeof(WndClass));
    WndClass.cbSize = sizeof(WndClass);
    // Fensterprozedur einhaengen
    WndClass.lpfnWndProc = WndProc;
    // Instanzen-Handle
    WndClass.hInstance = hInstance;
    // Icon fuer Fensterklasse laden
    WndClass.hIcon = LoadIcon(0,IDI_WINLOGO);
    // Cursor fuer Fensterklasse laden
    WndClass.hCursor = LoadCursor(0,IDC_UPARROW);
    // Fensterhintergrund setzen
    WndClass.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH);
    // Fensterklassen-Name
    WndClass.lpszClassName = lpszWCLASSNAME;
    // Fensterklasse registrieren
    RegisterClassEx(&amp;WndClass);

 // Fenster erzeugen
    HWND hWindow;                                  // Fenster-Handle
    hWindow = CreateWindowEx(0,                    // kein erweiterter Stil
                             lpszWCLASSNAME,       // Fensterklassen-Name
                             lpszTITLE,            // Fenstertitel
                             WS_OVERLAPPEDWINDOW,  // Fensterstil
                             CW_USEDEFAULT, 0,     // Position
                             CW_USEDEFAULT, 0,     // Groesse
                             (HWND)0,              // kein Parent-Fenster
                             (HMENU)0,             // kein Menu
                             hInstance,            // Instanzen-Handle
                             NULL);                // keine zusaetzl. Daten

		// Fehler abfangen
    if (hWindow == NULL)
    {
        MessageBox(0,&quot;Fehler beim CreateWindowEx(...)!&quot;,
                   &quot;FEHLER&quot;,MB_OK);
        return 0;
    }
		// Fenster darstellen
    // ------------------

		ShowWindow(hWindow, nCmdShow);
		HWND hbutton = ::CreateWindow(&quot;ERSTES FENSTER&quot;,&quot;button&quot;,WS_BORDER | WS_CHILD | BS_ICON |BS_PUSHLIKE ,0,0,50,50,hWindow,NULL,0,0);
		ShowWindow(hbutton,true);

		MSG strMessage;    // Nachrichten-Struktur definieren
    // Auf Nachricht warten
    while (GetMessage(&amp;strMessage,NULL,0,0))
    {
        // Tastencode uebersetzen
        TranslateMessage(&amp;strMessage);
        // Nachricht an Fensterprozedur verteilen
        DispatchMessage(&amp;strMessage);
    }

    return 0;
}
</code></pre>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/114530/nachrichtenverabeitung-eines-child-windows</link><generator>RSS for Node</generator><lastBuildDate>Wed, 01 Jul 2026 23:58:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/114530.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 05 Jul 2005 09:47:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Nachrichtenverabeitung eines Child Windows on Tue, 05 Jul 2005 09:47:35 GMT]]></title><description><![CDATA[<p>Hallo, ich hab mal ne Frage zu obigem Thema:<br />
Ich hab mir ein Fenster erstellt in das ich einen Button reingemacht hab.<br />
Nun stellt sich mir die Frage wie ich die Nachrichten abfange die an den Button gerichtet sind.<br />
Muss ich für den Button (also das Child) auch eine Fensterprocedur erzeugen?<br />
Ich hoffe mich kann jemand aufklären</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;
//#include &lt;stdio.h&gt;

// Konstanten
// ----------

// Funktionsprototyping!
// ---------------------
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg,
                         WPARAM wParam, LPARAM lParam);

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg,
                         WPARAM wParam, LPARAM lParam)
{
     switch (uMsg)
    {
    case WM_DESTROY:
        // Beim Eintreffen von WM_DESTROY, Anwendung beenden
        PostQuitMessage(0);
        return 0L;
		 case WM_CLOSE:
        {
             // Abfrage, ob Anwendung beendet werden soll
             int nRetVal = MessageBox(hWnd,
                            &quot;Soll die Anwendung beendet werden?&quot;,
                            &quot;WM_CLOSE&quot;, MB_YESNO);
             // Falls ja, Fenster zerstoeren
             if ( nRetVal == IDYES)
                 DestroyWindow(hWnd);
            return 0L;
        }

    }
		// Alles durch WINDOWS bearbeiten lassen
    return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

LPCTSTR lpszWCLASSNAME = &quot;ERSTES FENSTER&quot;;
LPCTSTR lpszTITLE = &quot;Mein erstes Fenster&quot;;

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR lpCmdLine,
                     int nCmdShow )
{
   // ZU ERLEDIGEN: Fügen Sie hier den Code ein.

    // Fensterklasse registrieren
    // --------------------------
    // WNDCLASS-Strukur
    WNDCLASSEX WndClass;
    // Struktur mit '0' vorbelegen
    memset(&amp;WndClass,0,sizeof(WndClass));
    WndClass.cbSize = sizeof(WndClass);
    // Fensterprozedur einhaengen
    WndClass.lpfnWndProc = WndProc;
    // Instanzen-Handle
    WndClass.hInstance = hInstance;
    // Icon fuer Fensterklasse laden
    WndClass.hIcon = LoadIcon(0,IDI_WINLOGO);
    // Cursor fuer Fensterklasse laden
    WndClass.hCursor = LoadCursor(0,IDC_UPARROW);
    // Fensterhintergrund setzen
    WndClass.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH);
    // Fensterklassen-Name
    WndClass.lpszClassName = lpszWCLASSNAME;
    // Fensterklasse registrieren
    RegisterClassEx(&amp;WndClass);

 // Fenster erzeugen
    HWND hWindow;                                  // Fenster-Handle
    hWindow = CreateWindowEx(0,                    // kein erweiterter Stil
                             lpszWCLASSNAME,       // Fensterklassen-Name
                             lpszTITLE,            // Fenstertitel
                             WS_OVERLAPPEDWINDOW,  // Fensterstil
                             CW_USEDEFAULT, 0,     // Position
                             CW_USEDEFAULT, 0,     // Groesse
                             (HWND)0,              // kein Parent-Fenster
                             (HMENU)0,             // kein Menu
                             hInstance,            // Instanzen-Handle
                             NULL);                // keine zusaetzl. Daten

		// Fehler abfangen
    if (hWindow == NULL)
    {
        MessageBox(0,&quot;Fehler beim CreateWindowEx(...)!&quot;,
                   &quot;FEHLER&quot;,MB_OK);
        return 0;
    }
		// Fenster darstellen
    // ------------------

		ShowWindow(hWindow, nCmdShow);
		HWND hbutton = ::CreateWindow(&quot;ERSTES FENSTER&quot;,&quot;button&quot;,WS_BORDER | WS_CHILD | BS_ICON |BS_PUSHLIKE ,0,0,50,50,hWindow,NULL,0,0);
		ShowWindow(hbutton,true);

		MSG strMessage;    // Nachrichten-Struktur definieren
    // Auf Nachricht warten
    while (GetMessage(&amp;strMessage,NULL,0,0))
    {
        // Tastencode uebersetzen
        TranslateMessage(&amp;strMessage);
        // Nachricht an Fensterprozedur verteilen
        DispatchMessage(&amp;strMessage);
    }

    return 0;
}
</code></pre>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/824067</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/824067</guid><dc:creator><![CDATA[hanserl]]></dc:creator><pubDate>Tue, 05 Jul 2005 09:47:35 GMT</pubDate></item><item><title><![CDATA[Reply to Nachrichtenverabeitung eines Child Windows on Tue, 05 Jul 2005 09:49:23 GMT]]></title><description><![CDATA[<p>Geht es nur darum einen Click auf den Button abzufangen? Oder willst du alle Nachrichten kriegen? Wenn ja dann lautet das Stichwort Subclassing.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/824069</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/824069</guid><dc:creator><![CDATA[drrr]]></dc:creator><pubDate>Tue, 05 Jul 2005 09:49:23 GMT</pubDate></item><item><title><![CDATA[Reply to Nachrichtenverabeitung eines Child Windows on Tue, 05 Jul 2005 09:54:19 GMT]]></title><description><![CDATA[<p>Naja,<br />
bisher würde mir ja ein click darauf schon reichen.<br />
Das Problem ist einfach dass ich nicht weiss wie ich in der Callback - Funktion zwischen dem Fenster und dem Button unterscheide.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/824072</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/824072</guid><dc:creator><![CDATA[hanserl]]></dc:creator><pubDate>Tue, 05 Jul 2005 09:54:19 GMT</pubDate></item><item><title><![CDATA[Reply to Nachrichtenverabeitung eines Child Windows on Tue, 05 Jul 2005 10:04:49 GMT]]></title><description><![CDATA[<p>da dein button ein child von deinem fenster ist fängst du nachrichten in der<br />
wndproc ab.</p>
<pre><code class="language-cpp">CreateWindow(&quot;ERSTES FENSTER&quot;,&quot;button&quot;,WS_BORDER | WS_CHILD | BS_ICON |BS_PUSHLIKE ,0,0,50,50,hWindow,1001,0,0);
</code></pre>
<pre><code class="language-cpp">case WM_COMMAND: 
    if (HIWORD(wParam) == BN_CLICKED) 
    { 
        switch (LOWORD(wParam)) 
        { 
            case 1001:
                MessageBox(hWnd, &quot;btn click&quot;, &quot;btn click&quot;, MB_OK);
</code></pre>
<p>[edit]tags vergessen<br />
[edit 3] letzter versuch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/824076</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/824076</guid><dc:creator><![CDATA[miller_m]]></dc:creator><pubDate>Tue, 05 Jul 2005 10:04:49 GMT</pubDate></item><item><title><![CDATA[Reply to Nachrichtenverabeitung eines Child Windows on Tue, 05 Jul 2005 10:56:48 GMT]]></title><description><![CDATA[<p>Hallo, danke für die Antworten,<br />
aber leider funzt es immer noch nicht.<br />
Ich bekomme auch schon einen Übersetzungsfehler wenn ich deine CreateWindow - Methode verwende<br />
(Konvertierung des Parameters 10 von 'const int' in 'struct HMENU__ *' nicht moeglich).<br />
Vielleicht hat noch jemand Rat?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/824114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/824114</guid><dc:creator><![CDATA[hanserl]]></dc:creator><pubDate>Tue, 05 Jul 2005 10:56:48 GMT</pubDate></item><item><title><![CDATA[Reply to Nachrichtenverabeitung eines Child Windows on Tue, 05 Jul 2005 11:08:03 GMT]]></title><description><![CDATA[<p>casten.</p>
<pre><code class="language-cpp">CreateWindow(&quot;ERSTES FENSTER&quot;,&quot;button&quot;,WS_BORDER | WS_CHILD | BS_ICON |BS_PUSHLIKE ,0,0,50,50,hWindow,(HMENU)1001,0,0);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/824121</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/824121</guid><dc:creator><![CDATA[miller_m]]></dc:creator><pubDate>Tue, 05 Jul 2005 11:08:03 GMT</pubDate></item><item><title><![CDATA[Reply to Nachrichtenverabeitung eines Child Windows on Tue, 05 Jul 2005 11:38:12 GMT]]></title><description><![CDATA[<p>Ich bekomm zwar keinen Fehler mehr, aber die MessageBox taucht trotzdem nicht auf <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 />
Das kann doch nicht so schwierig sein die richtigen Empfänger für Fenster (Button)<br />
zu ermitteln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/824148</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/824148</guid><dc:creator><![CDATA[hanserl]]></dc:creator><pubDate>Tue, 05 Jul 2005 11:38:12 GMT</pubDate></item><item><title><![CDATA[Reply to Nachrichtenverabeitung eines Child Windows on Tue, 05 Jul 2005 11:51:58 GMT]]></title><description><![CDATA[<p>noch einen fehler gefunden, der class name war falsch</p>
<pre><code class="language-cpp">CreateWindow(&quot;BUTTON&quot;,&quot;label&quot;,WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,0,0,50,50,hWindow,(HMENU)1001,0,0);
</code></pre>
<p><a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowfunctions/createwindow.asp" rel="nofollow">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowfunctions/createwindow.asp</a><br />
<a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/buttons/buttons.asp" rel="nofollow">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/buttons/buttons.asp</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/824160</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/824160</guid><dc:creator><![CDATA[miller_m]]></dc:creator><pubDate>Tue, 05 Jul 2005 11:51:58 GMT</pubDate></item><item><title><![CDATA[Reply to Nachrichtenverabeitung eines Child Windows on Tue, 05 Jul 2005 12:13:51 GMT]]></title><description><![CDATA[<p>Danke, etz klappts <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/824196</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/824196</guid><dc:creator><![CDATA[hanserl]]></dc:creator><pubDate>Tue, 05 Jul 2005 12:13:51 GMT</pubDate></item><item><title><![CDATA[Reply to Nachrichtenverabeitung eines Child Windows on Tue, 05 Jul 2005 12:48:44 GMT]]></title><description><![CDATA[<p>So, etz hätt ich noch eine kleine Frage und zwar:</p>
<p>Ich hab mir das ganze mit dem Spy - Tool angesehen. Nun ist es so dass beim anklicken des Buttons gar keine WM_COMMAND - Nachricht bei dem Button ankommt.<br />
Wie kann das dann überhaupt funktionieren?<br />
Ich bin verwirrt....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/824239</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/824239</guid><dc:creator><![CDATA[hanserl]]></dc:creator><pubDate>Tue, 05 Jul 2005 12:48:44 GMT</pubDate></item><item><title><![CDATA[Reply to Nachrichtenverabeitung eines Child Windows on Tue, 05 Jul 2005 13:07:12 GMT]]></title><description><![CDATA[<p>Die WM_COMMAND kommt beim PARENT des CHILDS (dem Button) an...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/824264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/824264</guid><dc:creator><![CDATA[MSDN]]></dc:creator><pubDate>Tue, 05 Jul 2005 13:07:12 GMT</pubDate></item><item><title><![CDATA[Reply to Nachrichtenverabeitung eines Child Windows on Tue, 05 Jul 2005 13:27:00 GMT]]></title><description><![CDATA[<p>Ahhhhh.... verstehe<br />
danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/824284</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/824284</guid><dc:creator><![CDATA[hanserl]]></dc:creator><pubDate>Tue, 05 Jul 2005 13:27:00 GMT</pubDate></item></channel></rss>