<?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[Warten bis Child geschlossen wurde]]></title><description><![CDATA[<p>Hiho.</p>
<p>Ich hab nen Child, das in einer Klasse aufgerufen wird.</p>
<p>Solange das Child offen ist, soll der Srccode angehalten bzw unterbrochen werden.</p>
<p>Erst wenn das Child mit WM_CLOSE oder WM_DESTROY geschlossen wurde, soll es weiter gehen.</p>
<p>Hatte schon ne Schleife, die so lange läuft, bis FindWindow() false ist.</p>
<p>Doch dadurch wird ja GetMessage() nicht mehr abgearbeitet (wird ja dann angehalten).</p>
<p>Also hab ich versucht die Schleife mit GetMessage() zu besetzten.</p>
<p>Nur läuft die Schleife selbst dann noch weiter, wenn das Child geschlossen wurde.</p>
<p>Irgendwo ist der Wurm.</p>
<p>Jemand ne Idee?</p>
<p>EDIT: Tschuldigung, sollte eigentlich ins WinApi Forum!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/237227/warten-bis-child-geschlossen-wurde</link><generator>RSS for Node</generator><lastBuildDate>Tue, 07 Apr 2026 13:49:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/237227.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 25 Mar 2009 22:44:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Warten bis Child geschlossen wurde on Wed, 25 Mar 2009 22:54:51 GMT]]></title><description><![CDATA[<p>Hiho.</p>
<p>Ich hab nen Child, das in einer Klasse aufgerufen wird.</p>
<p>Solange das Child offen ist, soll der Srccode angehalten bzw unterbrochen werden.</p>
<p>Erst wenn das Child mit WM_CLOSE oder WM_DESTROY geschlossen wurde, soll es weiter gehen.</p>
<p>Hatte schon ne Schleife, die so lange läuft, bis FindWindow() false ist.</p>
<p>Doch dadurch wird ja GetMessage() nicht mehr abgearbeitet (wird ja dann angehalten).</p>
<p>Also hab ich versucht die Schleife mit GetMessage() zu besetzten.</p>
<p>Nur läuft die Schleife selbst dann noch weiter, wenn das Child geschlossen wurde.</p>
<p>Irgendwo ist der Wurm.</p>
<p>Jemand ne Idee?</p>
<p>EDIT: Tschuldigung, sollte eigentlich ins WinApi Forum!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686096</guid><dc:creator><![CDATA[unlimieD.paSe]]></dc:creator><pubDate>Wed, 25 Mar 2009 22:54:51 GMT</pubDate></item><item><title><![CDATA[Reply to Warten bis Child geschlossen wurde on Thu, 26 Mar 2009 00:16:46 GMT]]></title><description><![CDATA[<p>WaitForSingleObject() und ein event mutex oder so was in der art sollte dein problem lösen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686109</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686109</guid><dc:creator><![CDATA[CTecS]]></dc:creator><pubDate>Thu, 26 Mar 2009 00:16:46 GMT</pubDate></item><item><title><![CDATA[Reply to Warten bis Child geschlossen wurde on Thu, 26 Mar 2009 00:35:27 GMT]]></title><description><![CDATA[<p>WaitForSingleObject() würde ja direkt wieder verschwinden, weil er das Handle zu meinem Window ja bekommt. Oder missverstehe ich die Funktion?</p>
<p>CTecS schrieb:</p>
<blockquote>
<p>und ein event mutex oder so was in der art</p>
</blockquote>
<p>???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686113</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686113</guid><dc:creator><![CDATA[unlimieD.paSe]]></dc:creator><pubDate>Thu, 26 Mar 2009 00:35:27 GMT</pubDate></item><item><title><![CDATA[Reply to Warten bis Child geschlossen wurde on Thu, 26 Mar 2009 01:47:56 GMT]]></title><description><![CDATA[<p>du sollst ja auch net das handle deines windows abfragen sondern ein event benutzen</p>
<p><a href="http://msdn.microsoft.com/en-us/library/ms686211(VS.85).aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/ms686211(VS.85).aspx</a></p>
<p>und das soll ja nur ein anstoß sein</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686120</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686120</guid><dc:creator><![CDATA[CTecS]]></dc:creator><pubDate>Thu, 26 Mar 2009 01:47:56 GMT</pubDate></item><item><title><![CDATA[Reply to Warten bis Child geschlossen wurde on Thu, 26 Mar 2009 07:16:22 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile-var-mode-is-viewprofile-and-u-is-100590.html" rel="nofollow">Martin Richter</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-1.html" rel="nofollow">MFC (Visual C++)</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-4.html" rel="nofollow">WinAPI</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39405.html" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686153</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686153</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Thu, 26 Mar 2009 07:16:22 GMT</pubDate></item><item><title><![CDATA[Reply to Warten bis Child geschlossen wurde on Thu, 26 Mar 2009 07:18:32 GMT]]></title><description><![CDATA[<p>Erzeuge einen neuen Thrad mit einer eigenen Message-Loop! Dort kannst Du das andere Fenster erzeugen und diesen Thread mit PostQuitMessage wie ein eigenes Windows Programm beenden. Der Main-Thread kann mit WaitForSingleObjekt auf diesen Thread waten.</p>
<p>Fenster sind threadafin. Man kann einen Thread nicht lahmlegen ohne damit auch die Fenster dieses Threads lahmzulegen.</p>
<p>IMHO ist es einfacher die aktuelle Applikation wie bei einem modalen Dialog lahmzulegene durch EnableWindow und das Child dann abarbeiten zu lassen.</p>
<p>Warum darf der Thread nicht weiter arbeiten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686155</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 26 Mar 2009 07:18:32 GMT</pubDate></item><item><title><![CDATA[Reply to Warten bis Child geschlossen wurde on Thu, 26 Mar 2009 21:40:36 GMT]]></title><description><![CDATA[<p>Martin Richter schrieb:</p>
<blockquote>
<p>Warum darf der Thread nicht weiter arbeiten?</p>
</blockquote>
<p>Weil in dem neuen Fenster auf eine Eingabe gewartet wird.</p>
<p>Sobald es eingegeben wurde, schließt sich das Fenster.</p>
<p>Anschließend soll es weiter im Text gehen ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686677</guid><dc:creator><![CDATA[unlimieD.paSe]]></dc:creator><pubDate>Thu, 26 Mar 2009 21:40:36 GMT</pubDate></item><item><title><![CDATA[Reply to Warten bis Child geschlossen wurde on Thu, 26 Mar 2009 22:01:52 GMT]]></title><description><![CDATA[<p>Dann ist doch ein modaler Dialog alles was Du brauchst...<br />
Ich verstehe nicht wo Dein Problem ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686682</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686682</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 26 Mar 2009 22:01:52 GMT</pubDate></item><item><title><![CDATA[Reply to Warten bis Child geschlossen wurde on Thu, 26 Mar 2009 22:38:50 GMT]]></title><description><![CDATA[<p>Hab meine Gründe, es soll einfach auf eine Eingabe gewartet werden.</p>
<p>Auf ne DialogBox() mit Resourcedateien verzichte ich lieber.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686698</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686698</guid><dc:creator><![CDATA[unlimieD.paSe]]></dc:creator><pubDate>Thu, 26 Mar 2009 22:38:50 GMT</pubDate></item><item><title><![CDATA[Reply to Warten bis Child geschlossen wurde on Thu, 26 Mar 2009 23:34:15 GMT]]></title><description><![CDATA[<p>unlimieD.paSe schrieb:</p>
<blockquote>
<p>Auf ne DialogBox() mit Resourcedateien verzichte ich lieber.</p>
</blockquote>
<p>Darf ich fragen, warum?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686710</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686710</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Thu, 26 Mar 2009 23:34:15 GMT</pubDate></item><item><title><![CDATA[Reply to Warten bis Child geschlossen wurde on Thu, 26 Mar 2009 23:57:03 GMT]]></title><description><![CDATA[<p>Weil ich keine Scriptartige resource Datei benutzen möchte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686715</guid><dc:creator><![CDATA[unlimieD.paSe]]></dc:creator><pubDate>Thu, 26 Mar 2009 23:57:03 GMT</pubDate></item><item><title><![CDATA[Reply to Warten bis Child geschlossen wurde on Fri, 27 Mar 2009 01:23:42 GMT]]></title><description><![CDATA[<p>Einen Dialog kannst du mit CreateDialogIndirect() auch ohne Ressourcendatei erzeugen.</p>
<p>Oder du disablest dein Parentwindow und regierst im Childwindow auf das Closeevent mit einer Nachricht an dein Prantwindow, nach deren Empfang du es wieder enablest.</p>
<p>/Ulli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686723</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686723</guid><dc:creator><![CDATA[Ulli]]></dc:creator><pubDate>Fri, 27 Mar 2009 01:23:42 GMT</pubDate></item><item><title><![CDATA[Reply to Warten bis Child geschlossen wurde on Fri, 27 Mar 2009 03:04:46 GMT]]></title><description><![CDATA[<p>Ich hab jetzt einfach mal ein &quot;Testprogramm&quot; gemacht, das auf Resourcedatei aufbaut.</p>
<p>Wie ihr meintet, habe ich diesmal ne DialogBox benutzt.</p>
<p>Leider komme ich jetzt an dem Punkt immer noch nicht weiter, wo ich schon voher nicht weiter kam.</p>
<p>Hier erstmal der vollständige Sourcecode:</p>
<pre><code class="language-cpp">#define STATIC

#include &lt;windows.h&gt;
#include &quot;resource.h&quot;

LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );
BOOL CALLBACK DialogProc( HWND, UINT, WPARAM, LPARAM );

const char szWndName[] = &quot;Test&quot;;
const char szDialogName[] = &quot;Dialog&quot;;

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iShowCmd )
{
	HWND hWnd;
	MSG msg;
	WNDCLASS ws;

	ws.cbClsExtra = 0;
	ws.cbWndExtra = 0;
	ws.hbrBackground = ( HBRUSH )CreateSolidBrush( RGB( 240, 240, 240 ) );
	ws.hCursor = LoadCursor( NULL, IDC_ARROW );
	ws.hIcon = LoadIcon( NULL, IDI_APPLICATION );
	ws.hInstance = hInstance;
	ws.lpfnWndProc = WndProc;
	ws.lpszClassName = szWndName;
	ws.lpszMenuName = NULL;
	ws.style = CS_VREDRAW | CS_HREDRAW;

	RegisterClass( &amp;ws );

	hWnd = CreateWindow( szWndName,
						 szWndName,
						 WS_OVERLAPPED | WS_SYSMENU,
						 CW_USEDEFAULT, CW_USEDEFAULT,
						 300, 100,
						 NULL,
						 NULL,
						 hInstance,
						 NULL );

	ShowWindow( hWnd, iShowCmd );
	UpdateWindow( hWnd );

	while( GetMessage( &amp;msg, NULL, 0, 0 ) )
	{
		TranslateMessage( &amp;msg );
		DispatchMessage( &amp;msg );
	}

	return msg.wParam;
};

LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
	static RECT clientRect;

	static HWND hButton;
	static HWND hChild;
	static HWND hDialog;

	static char szText[100];
	const char szT1[] = &quot;Noch nicht...&quot;;
	const char szT2[] = &quot;Jetzt aber !!&quot;;

	switch( uMsg )
	{
		case WM_SIZE:
		{
			GetClientRect( hWnd, &amp;clientRect );

			MoveWindow( hButton, 10, 10, clientRect.right - 20, 25, true );

			return 0;
		}

		case WM_CREATE:
		{
			hButton = CreateWindow( &quot;button&quot;,
									&quot;W E I T E R&quot;,
									WS_CHILD | WS_VISIBLE,
									0, 0,
									0, 0,
									hWnd,
									NULL,
									( ( LPCREATESTRUCT )lParam )-&gt;hInstance,
									NULL );

			memcpy( szText, szT1, lstrlen( szT1 ) );

			return 0;
		}

		case WM_COMMAND:
		{
			if( lParam == ( LPARAM )hButton )
			{
				if( HIWORD( wParam ) == BN_CLICKED )
				{
					hDialog = CreateDialog( NULL,
											MAKEINTRESOURCE( IDD_INFO ),
											hWnd,
											DialogProc );

					ShowWindow( hDialog, 1 );

					WaitForSingleObject( hDialog, INFINITE ); // Funktioniert nicht

					memcpy( szText, szT2, lstrlen( szT2 ) );

					InvalidateRect( hWnd, NULL, true );

					return 0;
				}
			}

			return 0;
		}

		case WM_PAINT:
		{
			PAINTSTRUCT ps;
			HDC hDc;
			SIZE size;

			hDc = BeginPaint( hWnd, &amp;ps );
			{
				GetTextExtentPoint32( hDc, szText, lstrlen( szText ), &amp;size );

				SetBkColor( hDc, RGB( 240, 240, 240 ) );

				TextOut( hDc, clientRect.right / 2 - size.cx / 2, clientRect.bottom - 15 - size.cy / 2, szText, lstrlen( szText ) );
			}
			EndPaint( hWnd, &amp;ps );

			return 0;
		}

		case WM_DESTROY:
		{
			PostQuitMessage( 0 );

			return 0;
		}
	}

	return DefWindowProc( hWnd, uMsg, wParam, lParam );
};

BOOL CALLBACK DialogProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
	switch( uMsg )
	{
		case WM_COMMAND:
		{
			switch( wParam )
			{
				case IDC_CONTINUE:
					EndDialog( hWnd, 0 );
				break;
			}

			return true;
		}
	}

	return false;
};
</code></pre>
<p>Kurze Beschreibung der Funktionsweise...</p>
<p>Das Programm startet.<br />
Unter dem &quot;Weiter&quot; Button steht &quot;Noch nicht...&quot;.<br />
Klickt man auf den &quot;Weiter&quot; Button, erscheint ein neues Fenster (in diesem Fall die DialoxBox ).<br />
In dem neuen Fenster ist ebenfalls ein &quot;Weiter&quot; Button.<br />
Sobald dieser geklickt wird, soll sich der Text auf &quot;Jetzt aber !!&quot; ändern.</p>
<p>Das sollte eigentlich passieren.</p>
<p>Leider entspricht das kompilierte Programm nicht meiner oben beschriebenen Vorstellung. Denn sobald ich schon auf den ersten &quot;Weiter&quot; Button im Hauptprogramm klicke, ändert sich bereits der Text.</p>
<p>Klar ! - Immerhin wird der Text genau nach dem Erstellen des Childs geändert.</p>
<p>Mir ist auch durchaus bewusst, dass ich den Text auch kurz vor dem EndDialog ändern kann. Dadurch würde es genau so funktionieren wie ich es wollte.</p>
<p>Leider ist mein Problem ja, dass es dort nicht geändert werden kann, sondern die Verarbeitung dringend angehalten werden muss.</p>
<p>Ich hoffe man versteht was ich meine.</p>
<p>Gruß, paSe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686727</guid><dc:creator><![CDATA[unlimieD.paSe]]></dc:creator><pubDate>Fri, 27 Mar 2009 03:04:46 GMT</pubDate></item><item><title><![CDATA[Reply to Warten bis Child geschlossen wurde on Fri, 27 Mar 2009 06:04:06 GMT]]></title><description><![CDATA[<p>Hi,<br />
wie waers mit: DialogBox() statt CreateDialog. Einfach mal in der MSDN gucken.</p>
<p>Blessed Love C0de4Fun</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686738</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686738</guid><dc:creator><![CDATA[C0de4Fun]]></dc:creator><pubDate>Fri, 27 Mar 2009 06:04:06 GMT</pubDate></item><item><title><![CDATA[Reply to Warten bis Child geschlossen wurde on Fri, 27 Mar 2009 13:40:03 GMT]]></title><description><![CDATA[<p>Sehr geil.</p>
<p>Es funktioniert.</p>
<p>Ich bedanke mich sehr bei euch!</p>
<pre><code class="language-cpp">#define STATIC

#include &lt;windows.h&gt;
#include &quot;resource.h&quot;

LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );
BOOL CALLBACK DialogProc( HWND, UINT, WPARAM, LPARAM );

const char szWndName[] = &quot;Test&quot;;
const char szDialogName[] = &quot;Dialog&quot;;

static INT_PTR iptDialog;

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iShowCmd )
{
	HWND hWnd;
	MSG msg;
	WNDCLASS ws;

	ws.cbClsExtra = 0;
	ws.cbWndExtra = 0;
	ws.hbrBackground = ( HBRUSH )CreateSolidBrush( RGB( 240, 240, 240 ) );
	ws.hCursor = LoadCursor( NULL, IDC_ARROW );
	ws.hIcon = LoadIcon( NULL, IDI_APPLICATION );
	ws.hInstance = hInstance;
	ws.lpfnWndProc = WndProc;
	ws.lpszClassName = szWndName;
	ws.lpszMenuName = NULL;
	ws.style = CS_VREDRAW | CS_HREDRAW;

	RegisterClass( &amp;ws );

	hWnd = CreateWindow( szWndName,
						 szWndName,
						 WS_OVERLAPPED | WS_SYSMENU,
						 CW_USEDEFAULT, CW_USEDEFAULT,
						 300, 100,
						 NULL,
						 NULL,
						 hInstance,
						 NULL );

	ShowWindow( hWnd, iShowCmd );
	UpdateWindow( hWnd );

	while( GetMessage( &amp;msg, NULL, 0, 0 ) )
	{
		TranslateMessage( &amp;msg );
		DispatchMessage( &amp;msg );
	}

	return msg.wParam;
};

LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
	static RECT clientRect;

	static HWND hButton;
	static HWND hChild;

	static char szText[100];
	const char szT1[] = &quot;Noch nicht...&quot;;
	const char szT2[] = &quot;Jetzt aber !!&quot;;

	switch( uMsg )
	{
		case WM_SIZE:
		{
			GetClientRect( hWnd, &amp;clientRect );

			MoveWindow( hButton, 10, 10, clientRect.right - 20, 25, true );

			return 0;
		}

		case WM_CREATE:
		{
			hButton = CreateWindow( &quot;button&quot;,
									&quot;W E I T E R&quot;,
									WS_CHILD | WS_VISIBLE,
									0, 0,
									0, 0,
									hWnd,
									NULL,
									( ( LPCREATESTRUCT )lParam )-&gt;hInstance,
									NULL );

			memcpy( szText, szT1, lstrlen( szT1 ) );

			return 0;
		}

		case WM_COMMAND:
		{
			if( lParam == ( LPARAM )hButton )
			{
				if( HIWORD( wParam ) == BN_CLICKED )
				{
					iptDialog = DialogBox( NULL,
										   MAKEINTRESOURCE( IDD_INFO ),
										   hWnd,
										   DialogProc );

					memcpy( szText, szT2, lstrlen( szT2 ) );

					InvalidateRect( hWnd, NULL, true );

					return 0;
				}
			}

			return 0;
		}

		case WM_PAINT:
		{
			PAINTSTRUCT ps;
			HDC hDc;
			SIZE size;

			hDc = BeginPaint( hWnd, &amp;ps );
			{
				GetTextExtentPoint32( hDc, szText, lstrlen( szText ), &amp;size );

				SetBkColor( hDc, RGB( 240, 240, 240 ) );

				TextOut( hDc, clientRect.right / 2 - size.cx / 2, clientRect.bottom - 15 - size.cy / 2, szText, lstrlen( szText ) );
			}
			EndPaint( hWnd, &amp;ps );

			return 0;
		}

		case WM_DESTROY:
		{
			PostQuitMessage( 0 );

			return 0;
		}
	}

	return DefWindowProc( hWnd, uMsg, wParam, lParam );
};

BOOL CALLBACK DialogProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
	switch( uMsg )
	{
		case WM_COMMAND:
		{
			switch( wParam )
			{
				case IDC_CONTINUE:
					EndDialog( hWnd, 0 );
				break;
			}

			return true;
		}
	}

	return false;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1686953</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686953</guid><dc:creator><![CDATA[unlimieD.paSe]]></dc:creator><pubDate>Fri, 27 Mar 2009 13:40:03 GMT</pubDate></item></channel></rss>