2. Dialog in InitInstance kann nicht erstellt werden



  • Hi an alle,

    ich habe folgendes Problem. Ich habe ein MFC Programm erstellt. Dieses ist Dialogbasierend.
    Nun starte ich in InitInstance den ersten Dialog. Ist kein Problem.
    Nachdem der Main Dialog seinen Zweck erfüllt hat soll ein weiterer Dialog gestartet werden. Dies funktioniert aber nicht. Ich bekomme beim Starten über DoModal immer -1 zurück und laut MSDN heißt das, dass der Dialog nicht erstellt werden kann. Starte ich den Dialog aber bevor ich den Hauptdialog starte, dann funktinoiert alles wunderbar. Kann man in InitInstance keinen Dialog mehr aufrufen wenn man das Hauptfenster einmal durchlaufen hat?

    Also ich finde im Moment keinen Grund warum das nicht klappt 😕 .
    Vllt. hat ja jemand von euch eine Idee.

    Gruß

    Karsten



  • du willst quaise 2 hauptdialoge verwendenen welche nacheinander via doModul in der initintsanz aufgerufen werden? seh ich das richtig? zeig mal den code



  • Ja das siehst du richtig

    CClient* pClient = new CClient();
    	BSTR bstrList;
    	/*CMessiListDlg dlgM; // Wenn ich den Dlg hier aufrufe klappt es
    	INT_PTR nResp;
    	nResp = dlgM.DoModal();
    	if(nResp == -1 || nResp == IDABORT)
    		TRACE("Fehlernummer: %d", GetLastError());*/
    	if(pClient->StartUp())
    	{
    		if(pClient->CreateConnectSocket())
    		{
    			if(pClient->Connect())
    			{
    				if(pClient->ClientMain() == 1)
    				{
    					CMessiClientDlg dlg;
    					m_pMainWnd = &dlg;
    					INT_PTR nResponse = dlg.DoModal();
    					if (nResponse == IDOK)
    					{
    						// TODO: Place code here to handle when the dialog is
    						//  dismissed with OK
    						string sName = CT2A(dlg.getName());
    						if(pClient->sendLoginData(sName))
    						{
    							if(pClient->getResponse())
    							{
    								if(pClient->sendListCommand())
    								{
    									bstrList = pClient->getList();
    								}
    
    							}
    
    							pClient->QuitClient();
    						}
    					}
    					else if (nResponse == IDCANCEL)
    					{
    						// TODO: Place code here to handle when the dialog is
    						//  dismissed with Cancel
    					}
    				}
    			}
    		}
    		delete pClient;
    		pClient = NULL;
    		CMessiListDlg dlgM; //Rufe ich ihn hier auf geht nix
    		INT_PTR nResp;
    		nResp = dlgM.DoModal();
    		if(nResp == -1 || nResp == IDABORT)
    			TRACE("Fehlernummer: %d", GetLastError());
    


  • und wieso machst du das so?



  • Weil ich davon ausgegangen bin dass es so funktionieren müsste :D.

    Nein das Ziel ist der erste Dialog holt sich Informationen vom Server und der 2.te soll damit eine Liste dieser Informationen anzeigen.
    Ich könnte auch die Dialoge abändern, so dass die Aufgabe die jetzt der Hauptdialog erledigt vom 2.ten Dlg abarbeiten lassen und das ganze somit umdrehen. Aber es muss doch möglich sein das man in InitInstance mehrere Dialoge aufruft.



  • naja das ist aber nich Sinn einer Dialog Anwendung;) Wieso machst keine SDI anwendung? Beim start erscheint ein Hauptfenster, und modal einDialog (Hole daten). Wenn dieses fertig ist, wird das dialog geschlossen un ddie daten werden im Hauptfenster angezeigt.. ist doch viel schöner 😃



  • Weil die Vorgabe nun mal so lautet dass die Applikation ausschließlich Dialogbasierend sein soll.
    Frag mich nicht warum ich habe das nicht empfohlen.



  • Naja hab es jetzt so gelöst dass die Dialoge in umgekehrter Reihenfolge aufgerufen werden. So klappt es dann auch.

    Falls jemand dennoch eine Antwort hat, ob dass auf dem ersten Weg regulär möglich ist würde mich das freuen


  • Mod

    Das Problem ist die Zuweisung von

    m_pMainWnd = &dlg;
    

    Wenn dieser Dialog schließt wird WM_QUIT versendet...

    Dein Problem bei diesem (idiotischen) Design ist, dass Du unter Umstaänden kein Main Window für Deine MFC Anwendung hast. Das kann in bestimmten Umständen zu Problemen führen...



  • Also doch besser dass als SDI Anwendung zu schreiben? Na dann will ich mal ein wenig Überzeugungsarbeit leisten vllt. hilfts ja 🙄



  • ne, kannst ja bei der dialoganwendug bleiben, allerdings würde ich nach start des programmes ein zweites dialog über das Hauptdialog legen und darin die Server Daten holen...oder du machst das erste dialog unsichbar, solange das zweite dialog angezeigt wird..


Anmelden zum Antworten