<?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[Dialog in Dialog in Dialog...]]></title><description><![CDATA[<p>Hi,</p>
<p>ich scheitere gerade kläglich bei dem versuch, aus einer dialogprocedure heraus einen weiteren Dialog zu öffnen. Der Dialog erscheint zwar, aber nur schemenhaft in die grafik des aufrufenden dialogs hinein. Danach geht nichts mehr. Bin da noch ein ziemlicher anfänger. Da ich nicht wußte was ich als hInstance nehmen muss hab ich die aus der WindowProcedure mit DialogBoxParam übergeben und für den aufruf des Zweiten Dialogs benutzt. ALs owner für den weiteren Dialog hab ich den handle des ersten dialogs genommen. Kann der code wie er unten steht so überhaupt funktionieren?</p>
<pre><code class="language-cpp">/*Gekuerzter Code... hInstance wird über die struktur TESTDIALOG_DATA mit DialogBoxParam übergeben... */

BOOL CALLBACK DialogProcedure(HWND, UINT, WPARAM, LPARAM);
BOOL CALLBACK TestDialogProcedure(HWND, UINT, WPARAM, LPARAM);

BOOL DialogProcedure (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	static HINSTANCE hInstance;
	static TESTDIALOG_DATA ad, *pad;
 	switch (message)
	{
		case WM_INITDIALOG:

		pad = (TESTDIALOG_DATA *) lParam;
		ad = * pad;

   		return true;

		case WM_COMMAND:
			switch (LOWORD (wParam))
			{

				case IDC_BUTTONPORTNEU:
				DialogBox(ad.instance, MAKEINTRESOURCE(DLG_PORTEDIT), hDlg, TestProcedure);
				return true;

				case IDCANCEL:
    			case IDC_PORTCANCEL:
				EndDialog (hDlg, 0);
				return true;

			}
		break;
	}
	return false;
}

BOOL TestProcedure (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{

 	switch (message)
	{
		case WM_INITDIALOG:

			return true;
			break;

		case WM_COMMAND:
			switch (LOWORD (wParam))
			{

				case IDC_EDITPORTCANCEL:
				case IDCANCEL:
				EndDialog (hDlg, 0);
				return true;
				break;
			}
		break;
	}
	return false;
}
</code></pre>
<p>gruß,<br />
andreas</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/66164/dialog-in-dialog-in-dialog</link><generator>RSS for Node</generator><lastBuildDate>Tue, 07 Apr 2026 21:10:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/66164.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 25 Feb 2004 17:02:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Dialog in Dialog in Dialog... on Wed, 25 Feb 2004 17:03:13 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich scheitere gerade kläglich bei dem versuch, aus einer dialogprocedure heraus einen weiteren Dialog zu öffnen. Der Dialog erscheint zwar, aber nur schemenhaft in die grafik des aufrufenden dialogs hinein. Danach geht nichts mehr. Bin da noch ein ziemlicher anfänger. Da ich nicht wußte was ich als hInstance nehmen muss hab ich die aus der WindowProcedure mit DialogBoxParam übergeben und für den aufruf des Zweiten Dialogs benutzt. ALs owner für den weiteren Dialog hab ich den handle des ersten dialogs genommen. Kann der code wie er unten steht so überhaupt funktionieren?</p>
<pre><code class="language-cpp">/*Gekuerzter Code... hInstance wird über die struktur TESTDIALOG_DATA mit DialogBoxParam übergeben... */

BOOL CALLBACK DialogProcedure(HWND, UINT, WPARAM, LPARAM);
BOOL CALLBACK TestDialogProcedure(HWND, UINT, WPARAM, LPARAM);

BOOL DialogProcedure (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	static HINSTANCE hInstance;
	static TESTDIALOG_DATA ad, *pad;
 	switch (message)
	{
		case WM_INITDIALOG:

		pad = (TESTDIALOG_DATA *) lParam;
		ad = * pad;

   		return true;

		case WM_COMMAND:
			switch (LOWORD (wParam))
			{

				case IDC_BUTTONPORTNEU:
				DialogBox(ad.instance, MAKEINTRESOURCE(DLG_PORTEDIT), hDlg, TestProcedure);
				return true;

				case IDCANCEL:
    			case IDC_PORTCANCEL:
				EndDialog (hDlg, 0);
				return true;

			}
		break;
	}
	return false;
}

BOOL TestProcedure (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{

 	switch (message)
	{
		case WM_INITDIALOG:

			return true;
			break;

		case WM_COMMAND:
			switch (LOWORD (wParam))
			{

				case IDC_EDITPORTCANCEL:
				case IDCANCEL:
				EndDialog (hDlg, 0);
				return true;
				break;
			}
		break;
	}
	return false;
}
</code></pre>
<p>gruß,<br />
andreas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/467763</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/467763</guid><dc:creator><![CDATA[Rossario]]></dc:creator><pubDate>Wed, 25 Feb 2004 17:03:13 GMT</pubDate></item><item><title><![CDATA[Reply to Dialog in Dialog in Dialog... on Wed, 25 Feb 2004 17:36:05 GMT]]></title><description><![CDATA[<p>DialogBox(..) erzeugt einen modalen Dialog, dh. die funktion kehrt erst zurück wenn du den Dialog schließt --&gt; dein Hauptdialog reagiert so lange auf nix mehr da du die message loop blockierst.<br />
Du kannst zb. CreateDialog verwenden um einen nicht modale dialog zu erzeugen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/467792</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/467792</guid><dc:creator><![CDATA[CMatt]]></dc:creator><pubDate>Wed, 25 Feb 2004 17:36:05 GMT</pubDate></item><item><title><![CDATA[Reply to Dialog in Dialog in Dialog... on Wed, 25 Feb 2004 19:23:12 GMT]]></title><description><![CDATA[<p>Aber das würde dann doch auch bedeuten, dass der hauptdialog aktiv ist und auf klicks reagiert, auch wenn der darin erzeugte weitere Dialog sichtbar ist, oder? ALso ich meine, so wie man auf dem Hauptfenster nichts machen kann wenn ein dialog offen ist, so müsste sich der Dialog auch verhalten wenn ich darin einen weiteren anzeige. Ich hab da nähmlich angst dass bei falscher bedienung durch den user der zweite Dialog im Hintergrund verschwindet. Aber das lässt sich sicher auch irgendwie lösen mit topmost oder wie das heißt.</p>
<p>also ich probier das jetzt einfach mal aus.</p>
<p>thanks,<br />
andreas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/467860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/467860</guid><dc:creator><![CDATA[Rossario]]></dc:creator><pubDate>Wed, 25 Feb 2004 19:23:12 GMT</pubDate></item><item><title><![CDATA[Reply to Dialog in Dialog in Dialog... on Wed, 25 Feb 2004 20:13:01 GMT]]></title><description><![CDATA[<p>Dein Problem:<br />
Dein erster Dialog hängt fest im case IDC_BUTTONPORTNEU, weil DialogBox so lange <strong>nicht</strong> zurückkehrt, bis Du den zweiten Dialog beendest!</p>
<p>Deshalb reagiert Dein erster Dialog auf keine Message mehr, wird daher nicht mehr neu gezeichnet, reagiert auf keine Mauseingaben usw.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/467899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/467899</guid><dc:creator><![CDATA[Hepi]]></dc:creator><pubDate>Wed, 25 Feb 2004 20:13:01 GMT</pubDate></item><item><title><![CDATA[Reply to Dialog in Dialog in Dialog... on Wed, 25 Feb 2004 20:37:08 GMT]]></title><description><![CDATA[<p>Ja das hab ich so weit schon kapiert. Hab jetzt mal das ganze abgeändert. Der zweite Dialog wird jetzt zwar einwandfrei angezeigt, den blauen balken hat aber weiterhin der hauptdialog. Die abbrechen und ok buttons des neuen dialogs reagieren zwar, aber das fenster bekommt keinen focus wenn ich draufklicke. Hab dann ein wenig mit der Message WM_ACTIVATE rumprobiert aber das wars auch nicht...</p>
<pre><code class="language-cpp">case WM_INITDIALOG:
			pad = (TESTDIALOG_DATA *) lParam;
			ad = * pad;
			testdialog = CreateDialog(ad.instance, MAKEINTRESOURCE(DLG_PORTEDIT), hDlg, TestProcedure);
			ShowWindow(testdialog, FALSE);
   			return true;

		case WM_COMMAND:
			switch (LOWORD (wParam))
			{

				case IDC_BUTTONPORTNEU:
					ShowWindow(testdialog, TRUE);
					//EnableWindow(testdialog, TRUE);
					return true;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/467915</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/467915</guid><dc:creator><![CDATA[Rossario]]></dc:creator><pubDate>Wed, 25 Feb 2004 20:37:08 GMT</pubDate></item><item><title><![CDATA[Reply to Dialog in Dialog in Dialog... on Thu, 26 Feb 2004 07:01:54 GMT]]></title><description><![CDATA[<p>Der Fehler hat sich gefunden. Der STYLE in der resource war falsch, nuu funtzt alles prima *freu*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/468071</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/468071</guid><dc:creator><![CDATA[Rossario]]></dc:creator><pubDate>Thu, 26 Feb 2004 07:01:54 GMT</pubDate></item></channel></rss>