<?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[Weiterer Schleifendurchgang trotz WM_QUIT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich versuche gerade, eine Windows Anwendung SAUBER zu beenden.</p>
<pre><code class="language-cpp">int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
{
	MeineKlasse::getInstance(hInstance);

	MSG msg = {0};

	while(msg.message != WM_QUIT)
	{
	    if(PeekMessage(&amp;msg, 0, 0, 0, PM_REMOVE)) 
		{
			TranslateMessage(&amp;msg);
			DispatchMessage(&amp;msg);
        }

		MeineKlasse::getInstance().Tick();
    }
}

LRESULT WINAPI MsgProc(HWND windowHandle, UINT msg, WPARAM wParam, LPARAM lParam) 
{
	switch(msg)
	{
	case WM_DESTROY:
		MeineKlasse::getInstance().Exit();

	}

	return DefWindowProc(windowHandle, msg, wParam, lParam);
}
</code></pre>
<p>Im Konstruktor meiner Klasse wird nur das Fenster erstellt.</p>
<pre><code class="language-cpp">void MeineKlasse::Tick()
{

	MessageBox(NULL, &quot;Window lost!&quot;, &quot;Error 05&quot;, MB_OK);

	DestroyWindow(windowHandle);
	PostQuitMessage(0);
	return;

	Sleep(1);
}
</code></pre>
<p>Kann mir nun jemand erklären, warum die MessageBox ZWEI mal erscheint, bevor das Programm beendet wird.</p>
<p>Und mache ich das so generell richtig?</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/179997/weiterer-schleifendurchgang-trotz-wm_quit</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Jul 2026 13:33:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/179997.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 27 Apr 2007 12:49:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Weiterer Schleifendurchgang trotz WM_QUIT on Fri, 27 Apr 2007 12:49:09 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich versuche gerade, eine Windows Anwendung SAUBER zu beenden.</p>
<pre><code class="language-cpp">int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
{
	MeineKlasse::getInstance(hInstance);

	MSG msg = {0};

	while(msg.message != WM_QUIT)
	{
	    if(PeekMessage(&amp;msg, 0, 0, 0, PM_REMOVE)) 
		{
			TranslateMessage(&amp;msg);
			DispatchMessage(&amp;msg);
        }

		MeineKlasse::getInstance().Tick();
    }
}

LRESULT WINAPI MsgProc(HWND windowHandle, UINT msg, WPARAM wParam, LPARAM lParam) 
{
	switch(msg)
	{
	case WM_DESTROY:
		MeineKlasse::getInstance().Exit();

	}

	return DefWindowProc(windowHandle, msg, wParam, lParam);
}
</code></pre>
<p>Im Konstruktor meiner Klasse wird nur das Fenster erstellt.</p>
<pre><code class="language-cpp">void MeineKlasse::Tick()
{

	MessageBox(NULL, &quot;Window lost!&quot;, &quot;Error 05&quot;, MB_OK);

	DestroyWindow(windowHandle);
	PostQuitMessage(0);
	return;

	Sleep(1);
}
</code></pre>
<p>Kann mir nun jemand erklären, warum die MessageBox ZWEI mal erscheint, bevor das Programm beendet wird.</p>
<p>Und mache ich das so generell richtig?</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1274596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1274596</guid><dc:creator><![CDATA[ceplusplus@loggedoff]]></dc:creator><pubDate>Fri, 27 Apr 2007 12:49:09 GMT</pubDate></item><item><title><![CDATA[Reply to Weiterer Schleifendurchgang trotz WM_QUIT on Fri, 27 Apr 2007 12:50:41 GMT]]></title><description><![CDATA[<p>Grml, in Exit() steht das:</p>
<pre><code class="language-cpp">DestroyWindow(windowHandle);
	PostQuitMessage(0);
	return;
</code></pre>
<p>Und wozu braucht man das return eigentlich? Steht meist hinter PostQuitMessage(0).</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1274597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1274597</guid><dc:creator><![CDATA[ceplusplus@loggedoff]]></dc:creator><pubDate>Fri, 27 Apr 2007 12:50:41 GMT</pubDate></item><item><title><![CDATA[Reply to Weiterer Schleifendurchgang trotz WM_QUIT on Fri, 27 Apr 2007 13:55:54 GMT]]></title><description><![CDATA[<p>Das <em>return</em> bezogen auf den Return-Typ <em>void</em> ist überflüssig, wenn es als letzte Anweisung im Funktiosblock steht.</p>
<p>Machs mal so:</p>
<pre><code class="language-cpp">int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
{
    MeineKlasse::getInstance(hInstance);

    MSG msgApp;
    while(PeekMessage(&amp;msgApp, 0, 0, 0, PM_REMOVE))
    {
        if(msgApp.message == WM_QUIT)
           break;

        TranslateMessage(&amp;msgApp);
        DispatchMessage(&amp;msgApp);

        MeineKlasse::getInstance().Tick();
    }
    return (msgApp.wParam);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1274663</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1274663</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Fri, 27 Apr 2007 13:55:54 GMT</pubDate></item><item><title><![CDATA[Reply to Weiterer Schleifendurchgang trotz WM_QUIT on Fri, 27 Apr 2007 14:22:59 GMT]]></title><description><![CDATA[<p>Jo, so erscheint nur eine MessageBox.</p>
<p>Aber warum? Nach Tick() wurde doch WM_QUIT geworfen, somit sollte die while- Schleife kein weiteres Mal mehr durchlaufen?</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1274681</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1274681</guid><dc:creator><![CDATA[ceplusplus@loggedoff]]></dc:creator><pubDate>Fri, 27 Apr 2007 14:22:59 GMT</pubDate></item><item><title><![CDATA[Reply to Weiterer Schleifendurchgang trotz WM_QUIT on Fri, 27 Apr 2007 14:33:38 GMT]]></title><description><![CDATA[<p>Achja, und bei deiner Variante beendet das Programm sofort, egal was passiert.</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1274687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1274687</guid><dc:creator><![CDATA[ceplusplus@loggedoff]]></dc:creator><pubDate>Fri, 27 Apr 2007 14:33:38 GMT</pubDate></item><item><title><![CDATA[Reply to Weiterer Schleifendurchgang trotz WM_QUIT on Fri, 27 Apr 2007 17:37:20 GMT]]></title><description><![CDATA[<p>Naja habs jetzt so gemacht:</p>
<pre><code class="language-cpp">int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
{
	MeineKlasse::getInstance(hInstance);

	MSG msg = { 0 };

	while(true)
	{
		if(PeekMessage(&amp;msg, 0, 0, 0, PM_REMOVE)) 
		{ 
			if(msg.message == WM_QUIT)
				break; 

			TranslateMessage(&amp;msg); 
			DispatchMessage(&amp;msg); 
		}

		MeineKlasse::getInstance().Tick(); 
	}
}
</code></pre>
<p>Geht nicht vielleicht irgendwie &quot;eleganter&quot;?</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1274788</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1274788</guid><dc:creator><![CDATA[ceplusplus@loggedoff]]></dc:creator><pubDate>Fri, 27 Apr 2007 17:37:20 GMT</pubDate></item></channel></rss>