<?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[Noob-Frage : 2 Fenster und nur eins löschen???]]></title><description><![CDATA[<p>also ich hab da mal ne anfänger-frage...</p>
<p>wenn ich 2 Fenster erstelle wie z.B. hier :</p>
<pre><code>#include &lt;windows.h&gt; 
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); 

int WINAPI WinMain (HINSTANCE hI, HINSTANCE hPrI, PSTR szCmdLine, int iCmdShow) 
{ 
char szName[] = &quot;Fensterklasse&quot;; 
WNDCLASS wc; 
wc.style = CS_HREDRAW | CS_VREDRAW; 
wc.lpfnWndProc = WndProc; 
wc.cbClsExtra = 0; 
wc.cbWndExtra = 0; 
wc.hInstance = hI; 
wc.hIcon = LoadIcon (NULL, IDI_WINLOGO); 
wc.hCursor = LoadCursor (NULL, IDC_ARROW); 
wc.hbrBackground = (HBRUSH) GetStockObject (LTGRAY_BRUSH); 
wc.lpszMenuName = NULL; 
wc.lpszClassName = szName; 
RegisterClass (&amp;wc); 

HWND hwnd = CreateWindow          // Fenster 1 
( 
    szName, 
    &quot;Dies ist unser erstes kleines Fenster&quot;, 
    WS_OVERLAPPEDWINDOW, 
    CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 
    NULL, // Handle des Elternfensters nicht vorhanden 
    NULL, 
    hI, 
    NULL 
); 

ShowWindow   (hwnd, iCmdShow); 
UpdateWindow (hwnd); 

HWND hwnd2 = CreateWindow        // Fenster 2 
( 
    szName, 
    &quot;Dies ist unser zweites kleines Fenster&quot;, 
    WS_OVERLAPPEDWINDOW, 
    200, 200, 200, 50, 
    hwnd, // Handle des Elternfensters 
    NULL, 
    NULL, 
    NULL 
); 

ShowWindow   (hwnd2, SW_SHOWNORMAL); 
UpdateWindow (hwnd2); 

//----------------------------------------------------------------------------------- 

  MSG msg; 
  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) 
{ 
    HDC hdc; 
    PAINTSTRUCT ps; 

    switch (message) 
    { 
    case WM_PAINT: 
        hdc = BeginPaint (hwnd, &amp;ps); 
            TextOut (hdc, 20, 20, &quot;Ich bin ein Fenster.&quot;, 20); 
        EndPaint (hwnd, &amp;ps); 
    return 0; 

    case WM_DESTROY: 
        PostQuitMessage (0); 
    return 0; 
    } 

return DefWindowProc (hwnd, message, wParam, lParam); 
}
</code></pre>
<p>und wenn ich dann das 2. Fenster schließe, schließt sich die gesamte anwendung...<br />
wie kann ich das machen, dass wenn er die WM_DESTROY Nachricht aufruft wirklich nur das Fenster löscht.</p>
<p>Früher hab ich das Problem immer so gelöst, dass ich alle Fenster am Anfang geöffnet habe, nur nicht alle angezeigt...aber das ist ja keine dauerhafte lösung...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/110190/noob-frage-2-fenster-und-nur-eins-löschen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 30 Jun 2026 23:24:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/110190.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 18 May 2005 14:33:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Noob-Frage : 2 Fenster und nur eins löschen??? on Wed, 18 May 2005 14:33:56 GMT]]></title><description><![CDATA[<p>also ich hab da mal ne anfänger-frage...</p>
<p>wenn ich 2 Fenster erstelle wie z.B. hier :</p>
<pre><code>#include &lt;windows.h&gt; 
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); 

int WINAPI WinMain (HINSTANCE hI, HINSTANCE hPrI, PSTR szCmdLine, int iCmdShow) 
{ 
char szName[] = &quot;Fensterklasse&quot;; 
WNDCLASS wc; 
wc.style = CS_HREDRAW | CS_VREDRAW; 
wc.lpfnWndProc = WndProc; 
wc.cbClsExtra = 0; 
wc.cbWndExtra = 0; 
wc.hInstance = hI; 
wc.hIcon = LoadIcon (NULL, IDI_WINLOGO); 
wc.hCursor = LoadCursor (NULL, IDC_ARROW); 
wc.hbrBackground = (HBRUSH) GetStockObject (LTGRAY_BRUSH); 
wc.lpszMenuName = NULL; 
wc.lpszClassName = szName; 
RegisterClass (&amp;wc); 

HWND hwnd = CreateWindow          // Fenster 1 
( 
    szName, 
    &quot;Dies ist unser erstes kleines Fenster&quot;, 
    WS_OVERLAPPEDWINDOW, 
    CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 
    NULL, // Handle des Elternfensters nicht vorhanden 
    NULL, 
    hI, 
    NULL 
); 

ShowWindow   (hwnd, iCmdShow); 
UpdateWindow (hwnd); 

HWND hwnd2 = CreateWindow        // Fenster 2 
( 
    szName, 
    &quot;Dies ist unser zweites kleines Fenster&quot;, 
    WS_OVERLAPPEDWINDOW, 
    200, 200, 200, 50, 
    hwnd, // Handle des Elternfensters 
    NULL, 
    NULL, 
    NULL 
); 

ShowWindow   (hwnd2, SW_SHOWNORMAL); 
UpdateWindow (hwnd2); 

//----------------------------------------------------------------------------------- 

  MSG msg; 
  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) 
{ 
    HDC hdc; 
    PAINTSTRUCT ps; 

    switch (message) 
    { 
    case WM_PAINT: 
        hdc = BeginPaint (hwnd, &amp;ps); 
            TextOut (hdc, 20, 20, &quot;Ich bin ein Fenster.&quot;, 20); 
        EndPaint (hwnd, &amp;ps); 
    return 0; 

    case WM_DESTROY: 
        PostQuitMessage (0); 
    return 0; 
    } 

return DefWindowProc (hwnd, message, wParam, lParam); 
}
</code></pre>
<p>und wenn ich dann das 2. Fenster schließe, schließt sich die gesamte anwendung...<br />
wie kann ich das machen, dass wenn er die WM_DESTROY Nachricht aufruft wirklich nur das Fenster löscht.</p>
<p>Früher hab ich das Problem immer so gelöst, dass ich alle Fenster am Anfang geöffnet habe, nur nicht alle angezeigt...aber das ist ja keine dauerhafte lösung...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/790822</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/790822</guid><dc:creator><![CDATA[Heinz-Harald]]></dc:creator><pubDate>Wed, 18 May 2005 14:33:56 GMT</pubDate></item><item><title><![CDATA[Reply to Noob-Frage : 2 Fenster und nur eins löschen??? on Wed, 18 May 2005 14:39:45 GMT]]></title><description><![CDATA[<p>Ich weiß natürlich, das die beiden Fenster in dem Beispiel nur eine Fensterprozedur haben, aber auch wenn ich für beide eine habe, kommt das selbe raus...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/790826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/790826</guid><dc:creator><![CDATA[Heinz-Harald]]></dc:creator><pubDate>Wed, 18 May 2005 14:39:45 GMT</pubDate></item><item><title><![CDATA[Reply to Noob-Frage : 2 Fenster und nur eins löschen??? on Wed, 18 May 2005 14:55:47 GMT]]></title><description><![CDATA[<p>Mach nen Counter rein, immer wenn nen Fenster erstellt wird wird der Counter um eines hoch gemacht, wenn eins gelsöcht wird, um eines Runter. Wenn der Coutner 0 ist, rufste PostQuitMessage auf^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/790849</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/790849</guid><dc:creator><![CDATA[FragtNicht^^]]></dc:creator><pubDate>Wed, 18 May 2005 14:55:47 GMT</pubDate></item><item><title><![CDATA[Reply to Noob-Frage : 2 Fenster und nur eins löschen??? on Wed, 18 May 2005 16:11:26 GMT]]></title><description><![CDATA[<p>ging das net mit sendmessage wm_close?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/790927</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/790927</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Wed, 18 May 2005 16:11:26 GMT</pubDate></item><item><title><![CDATA[Reply to Noob-Frage : 2 Fenster und nur eins löschen??? on Wed, 18 May 2005 17:18:09 GMT]]></title><description><![CDATA[<p>Vorweg: Korrigiert mich, falls ich falsch liegen sollte. <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>
<p>Soweit ich weiß sendet Windows zuerst ein WM_CLOSE, wenn das Fenster geschlossen wird und dann ein WM_DESTROY für das gleiche Fenster hinterher. Bei WM_CLOSE gibt es das Fenster noch, da könnte man z.B. ein schließen des Fensters noch verhindern, bei WM_DESTROY gibt es das Fenster afaik nicht mehr. Wenn Du jetzt nur eine WndProc für beide Fenster nimmst und bei WM_DESTROY die Funktion PostQuitMessage aufrufst, dann ist es egal welches Fenster Du schließt, die Funktion beendet Deine Nachrichtenschleife und die main-Funktion wird beendet.</p>
<p>Entweder Du speicherst in einer globalen Variablen das Handle des &quot;Hauptfensters&quot;, welches, wenn es geschlossen wird dafür sorgen soll, dass auch die Anwendung beendet wird, oder Du nimmst 2 WndProcs. Die zweite für das Hauptfenster könnte z.B. nur die Nachricht WM_DESTROY mit PostQuitMessage bearbeiten und danach alle Nachrichten per CallWindowProc(...) an die andere WindowProc weiterleiten. Wäre, denke ich besser, da Du zwar eine weitere Funktion brauchst, aber keine globale Variable.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/790968</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/790968</guid><dc:creator><![CDATA[mantiz]]></dc:creator><pubDate>Wed, 18 May 2005 17:18:09 GMT</pubDate></item><item><title><![CDATA[Reply to Noob-Frage : 2 Fenster und nur eins löschen??? on Wed, 18 May 2005 21:49:02 GMT]]></title><description><![CDATA[<p>Wenn man WM_CLOSE nicht abfängt, wird von DefWindowProc() eine WM_DESTROY-Message erzeugt <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=";D"
      alt="😉"
    /></p>
<p>Ich vote für die Counter-Lösung <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=";D"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/791090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/791090</guid><dc:creator><![CDATA[geeky]]></dc:creator><pubDate>Wed, 18 May 2005 21:49:02 GMT</pubDate></item><item><title><![CDATA[Reply to Noob-Frage : 2 Fenster und nur eins löschen??? on Wed, 18 May 2005 22:42:20 GMT]]></title><description><![CDATA[<p>Ja, dann war das ja soweit richtig.</p>
<p>Zum Counter: Hatte ich ganz vergessen, wenn man natürlich will, dass immer das letzte Fenster, welches geöffnet ist dafür sorgt, dass die Anwendung beendet wird, dann hast Du mit dem Counter natürlich völlig recht. Aber häufig ist es ja so, dass man ein Hauptfenster hat, welches durch das schließen dafür sorgt, dass die Anwendung beendet wird.<br />
Egal, ich denke es sind genügend Lösungen vorhanden, kann man sich jetzt die für sich schönste oder evtl. für den jew. Anwendungsfall bessere raussuchen. <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/791106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/791106</guid><dc:creator><![CDATA[mantiz]]></dc:creator><pubDate>Wed, 18 May 2005 22:42:20 GMT</pubDate></item><item><title><![CDATA[Reply to Noob-Frage : 2 Fenster und nur eins löschen??? on Thu, 19 May 2005 04:53:03 GMT]]></title><description><![CDATA[<p>Super, danke. ich denk das hilft weiter...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/791124</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/791124</guid><dc:creator><![CDATA[Hein-Harald]]></dc:creator><pubDate>Thu, 19 May 2005 04:53:03 GMT</pubDate></item></channel></rss>