<?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[Aufbau einer Dialogstruktur für zu Laufzeitfehler]]></title><description><![CDATA[<p>Hi Zusammen,</p>
<p>ich hab mal wieder ein Problem mit dem Anzeigen einer Reihe von Dialogen.<br />
Ich würde gerne einen Hauptdialog anzeigen, aus welchem der Benutzer entweder<br />
den Log-In-Dialog oder den Optionen Dialog aufrufen kann.<br />
Der Log-In-Dialog soll dann zum eigentlichen Hauptdialog führen und der<br />
Optionen-Dialog soll wieder zurück zum Hauptdialog führen.</p>
<p>Mein bisheriger Code (in der CMeinDialog.cpp-Datei):</p>
<pre><code class="language-cpp">CMORK_BEWEGUNGDlg	dlgSpiel;
	CMenueDialog		dlgMenue;
	CLoginDialog		dlgLogin;
	COptionenDialog		dlgOptionen;

	m_pMainWnd			= &amp;dlgSpiel;
	int auswahlMenue	= 0;
	int auswahlLogin	= 0;
	int auswahlOptionen	= 0;
	int auswahlSpiel	= 0;

	auswahlMenue = dlgMenue.DoModal();

	if (auswahlMenue == 1)					// LOGIN
	{
		auswahlLogin = dlgLogin.DoModal();
		if (auswahlLogin == 1)					// WEITER
		{
			auswahlSpiel = dlgSpiel.DoModal();
		}
		else if (auswahlLogin == 2)				// ABBRECHEN
		{
		}
	}
	else if (auswahlMenue == 2)				// OPTIONEN
	{
		auswahlOptionen = dlgOptionen.DoModal();
		if (auswahlOptionen == 1)				// SPEICHERN
		{
		}
		else if (auswahlOptionen == 2)			// ABBRECHEN
		{
		}
	}
</code></pre>
<p>Schmiert mit dem Laufzeitfehler &quot;Debug Assertion Failed&quot; ab..</p>
<p>Hat jemand eine Idee woran das liegen könnte?<br />
Ich vermute am m_pMainWnd-Zeiger, bin mir aber nicht sicher und wüßte auch<br />
nicht wie ich diees Problem umgehen soll, da ich, wenn ich den Zeiger auf den<br />
Menue-Dialog zeigen lasse, den Dialog noch vor der IF-Schleife terminieren<br />
lasse <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="😞"
    /></p>
<p>Danke im Voraus,<br />
Khadgar</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/48935/aufbau-einer-dialogstruktur-für-zu-laufzeitfehler</link><generator>RSS for Node</generator><lastBuildDate>Wed, 29 Apr 2026 02:56:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/48935.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 14 Sep 2003 12:10:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Aufbau einer Dialogstruktur für zu Laufzeitfehler on Sun, 14 Sep 2003 12:10:44 GMT]]></title><description><![CDATA[<p>Hi Zusammen,</p>
<p>ich hab mal wieder ein Problem mit dem Anzeigen einer Reihe von Dialogen.<br />
Ich würde gerne einen Hauptdialog anzeigen, aus welchem der Benutzer entweder<br />
den Log-In-Dialog oder den Optionen Dialog aufrufen kann.<br />
Der Log-In-Dialog soll dann zum eigentlichen Hauptdialog führen und der<br />
Optionen-Dialog soll wieder zurück zum Hauptdialog führen.</p>
<p>Mein bisheriger Code (in der CMeinDialog.cpp-Datei):</p>
<pre><code class="language-cpp">CMORK_BEWEGUNGDlg	dlgSpiel;
	CMenueDialog		dlgMenue;
	CLoginDialog		dlgLogin;
	COptionenDialog		dlgOptionen;

	m_pMainWnd			= &amp;dlgSpiel;
	int auswahlMenue	= 0;
	int auswahlLogin	= 0;
	int auswahlOptionen	= 0;
	int auswahlSpiel	= 0;

	auswahlMenue = dlgMenue.DoModal();

	if (auswahlMenue == 1)					// LOGIN
	{
		auswahlLogin = dlgLogin.DoModal();
		if (auswahlLogin == 1)					// WEITER
		{
			auswahlSpiel = dlgSpiel.DoModal();
		}
		else if (auswahlLogin == 2)				// ABBRECHEN
		{
		}
	}
	else if (auswahlMenue == 2)				// OPTIONEN
	{
		auswahlOptionen = dlgOptionen.DoModal();
		if (auswahlOptionen == 1)				// SPEICHERN
		{
		}
		else if (auswahlOptionen == 2)			// ABBRECHEN
		{
		}
	}
</code></pre>
<p>Schmiert mit dem Laufzeitfehler &quot;Debug Assertion Failed&quot; ab..</p>
<p>Hat jemand eine Idee woran das liegen könnte?<br />
Ich vermute am m_pMainWnd-Zeiger, bin mir aber nicht sicher und wüßte auch<br />
nicht wie ich diees Problem umgehen soll, da ich, wenn ich den Zeiger auf den<br />
Menue-Dialog zeigen lasse, den Dialog noch vor der IF-Schleife terminieren<br />
lasse <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="😞"
    /></p>
<p>Danke im Voraus,<br />
Khadgar</p>
]]></description><link>https://www.c-plusplus.net/forum/post/353278</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/353278</guid><dc:creator><![CDATA[Khadgar]]></dc:creator><pubDate>Sun, 14 Sep 2003 12:10:44 GMT</pubDate></item><item><title><![CDATA[Reply to Aufbau einer Dialogstruktur für zu Laufzeitfehler on Sun, 14 Sep 2003 14:27:57 GMT]]></title><description><![CDATA[<p>Also wenn ich so einen Style hätte wäre ich froh wenn mein Compiler mir nen Elektoschock verpassen könnte <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=";)"
      alt="😉"
    /> .</p>
<pre><code class="language-cpp">m_pMainWnd            = &amp;dlgSpiel; 
    int auswahlMenue    = 0; 
    int auswahlLogin    = 0; 
    int auswahlOptionen    = 0; 
    int auswahlSpiel    = 0; 

    auswahlMenue = dlgMenue.DoModal();
</code></pre>
<p>Du schreibst keinen uralt C-Code. Man erstellt Objekte etc. erst wenn man sie benötigt. Und das vorinitialisieren mit 0 ist hier Schwachsinn. Warum nicht so?</p>
<pre><code class="language-cpp">int auswahlMenue = dlgMenue.DoModal();
</code></pre>
<p>Oder noch einfacher statt deiner if-else Konstruktionen einfach:</p>
<pre><code class="language-cpp">switch(dlgMenue.DoModal())
{
case IDOK:
  //...
break;
  //...
}
</code></pre>
<p>Wenn du nicht zeigst wo du m_pMainWnd verwendest kann ich dir auch nicht helfen.</p>
<p>Mal es dir am besten auf einem Schmierzettel mal auf und überlege eine Sekunde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/353353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/353353</guid><dc:creator><![CDATA[Walli]]></dc:creator><pubDate>Sun, 14 Sep 2003 14:27:57 GMT</pubDate></item><item><title><![CDATA[Reply to Aufbau einer Dialogstruktur für zu Laufzeitfehler on Sun, 14 Sep 2003 21:02:28 GMT]]></title><description><![CDATA[<p>MaSTaH schrieb:</p>
<blockquote>
<p>Also wenn ich so einen Style hätte wäre ich froh wenn mein Compiler mir nen Elektoschock verpassen könnte <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=";)"
      alt="😉"
    /> .<br />
Du schreibst keinen uralt C-Code. Man erstellt Objekte etc. erst wenn man sie benötigt. Und das vorinitialisieren mit 0 ist hier Schwachsinn. Warum nicht so?</p>
</blockquote>
<p>Sicher hätte ich das noch ensprechend umformen können, aber der Code, so wie<br />
ich ihn hier präsentiert habe entstand im Rahmen der Fehlersuche (ich habe halt<br />
erstmal alles auseinander genommen und dachte so eher den Fehler zu finden).<br />
Ansonsten hast du natürlich recht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>MaSTaH schrieb:</p>
<blockquote>
<p>Wenn du nicht zeigst wo du m_pMainWnd verwendest kann ich dir auch nicht helfen.</p>
</blockquote>
<p>Der Zeiger 'm_pMainWnd' ist Teil der CWinApp-Basisklasse CWinThread und zeigt<br />
auf das Hauptfenster meine Applikation. Wird diese geschlossen wird die<br />
gesamte Anwendung terminiert (<a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmfc98/html/_mfc_cwinthread.3a3a.m_pmainwnd.asp" rel="nofollow">MSDN</a>).<br />
Deswegen habe ich diese Zeiger ja auch nicht auf dlgSpiel sondern auf dlgSpiel<br />
zeigen lassen.</p>
<p>[edit] Musste dlgSpiel heissen [/edit]</p>
<p>Trotzdem helfen mir die Angaben aus der MSDN nicht wirklich weiter <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="😞"
    /></p>
<p>Hast du nicht doch 'ne Idee <strong>MaSTaH</strong>?<br />
Oder hat sonst jemand eine Vermutung weshalb dieses Konstrukt so nicht<br />
lauffähig ist?</p>
<p>Danke im Voraus,<br />
Khadgar</p>
]]></description><link>https://www.c-plusplus.net/forum/post/353619</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/353619</guid><dc:creator><![CDATA[Khadgar]]></dc:creator><pubDate>Sun, 14 Sep 2003 21:02:28 GMT</pubDate></item><item><title><![CDATA[Reply to Aufbau einer Dialogstruktur für zu Laufzeitfehler on Mon, 15 Sep 2003 00:50:57 GMT]]></title><description><![CDATA[<p>dlgcore.cpp, Zeile 675</p>
<pre><code class="language-cpp">// in case of modeless dialogs, last chance route through main
	//   window's accelerator table
	if (pMainWnd != NULL)
	{
		 CWnd* pWnd = CWnd::FromHandle(pMsg-&gt;hwnd);
		 if (pWnd-&gt;GetTopLevelParent() != pMainWnd)
			return pMainWnd-&gt;PreTranslateMessage(pMsg);
	}
</code></pre>
<p>Hier wird überprüft ob pMainWnd != 0 (TopLevelParent kann der Dialog ja nicht sein). Wenn ja dann wird pMainWnd-&gt;PreTranslateMessage(pMsg) ausgeführt.<br />
In PreTranslateMessage ist ein ASSERT(m_hWnd != 0) was aber in deinem Fall 0 ist.</p>
<p>Also entweder bei jedem Dialog den du erstellst zeigt m_pMainWnd auf ein gültiges Fenster oder lasse m_pMainWnd bei 0.</p>
<p>Für ersteres nimm den ganzen Code aus der InitInstance und packe ihn in deinen HauptDialog. Statt den HauptDialog zu beenden kann man ihn auch verstecken. In der InitInstance musst du natürlich via CDialog::DoModal noch deinen HauptDialog anzeigen.</p>
<p>/E: m_pMainWnd == 0 könnte eventuell unerwünschte Nebeneffekte mit sich bringen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/353672</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/353672</guid><dc:creator><![CDATA[Oliver]]></dc:creator><pubDate>Mon, 15 Sep 2003 00:50:57 GMT</pubDate></item><item><title><![CDATA[Reply to Aufbau einer Dialogstruktur für zu Laufzeitfehler on Mon, 15 Sep 2003 14:40:44 GMT]]></title><description><![CDATA[<p>[quote=&quot;Nemesyzz&quot;]dlgcore.cpp, Zeile 675<br />
Für ersteres nimm den ganzen Code aus der InitInstance und packe ihn in deinen HauptDialog. Statt den HauptDialog zu beenden kann man ihn auch verstecken. In der InitInstance musst du natürlich via CDialog::DoModal noch deinen HauptDialog anzeigen.<br />
quote]</p>
<p>Vielen Dank <strong>Nemesyzz</strong>!<br />
Ich habs jetzt so wie oben beschrieben gemacht und es läuft endlich <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Vielen auch dir <strong>MaSTaH</strong>!</p>
<p>Ich bastel dann mal weiter <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>Gruß,<br />
Khadgar</p>
]]></description><link>https://www.c-plusplus.net/forum/post/354062</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/354062</guid><dc:creator><![CDATA[Khadgar]]></dc:creator><pubDate>Mon, 15 Sep 2003 14:40:44 GMT</pubDate></item></channel></rss>