DoModal(); ausgetrickst. Aber ich will das doch garnicht!



  • wahrscheinlich ein typischer Anfängerfehler. Ich hab mich irgendwie selbst reingelegt

    In meiner Klasse CEinlesenDlg habe ich die Funktion Protokol(), welche korrekt mit m_DStoffliste.DoModal(); ein neues Dialogfenster öffnet.

    void CEinlesenDlg::Protokol()
    {
    	PKontaktLabeo m_PKontakt(this);
    	int keinStoff= m_PKontakt.FindStoff();
    
    	//+--------------------------------------------------------------------------+
    	//+ Wenn es Stoff gibt der nicht, oder nicht ausreichen da ist, dann Anzeigen+
    	//+--------------------------------------------------------------------------+
    	if (keinStoff!=0)							
    	{
    		DStoffliste m_DStoffliste(this);
    		m_DStoffliste.DoModal();
    	}
    }
    

    ich rufe diese Fkt jedoch aus einer anderen Klasse (mit eigenem Dialogfenster) auf m_pPar->Protokol(); auch das funktioniert. Leider hat das neue Dialogfenster nicht mehr die normalen Eigenschaften von DoModal(). ich kann nämlich einfach auf das Fenster von DVST_Beschreibung Beschreibung gehen und ein zweites Fenster von DStoffliste öffnen.

    DVST_Beschreibung::DVST_Beschreibung(CWnd* pParent /*=NULL*/)
    	: CDialog(DVST_Beschreibung::IDD, pParent)
    {
    	m_pPar	= (CEinlesenDlg*)pParent;
    	//{{AFX_DATA_INIT(DVST_Beschreibung)
    		// HINWEIS: Der Klassen-Assistent fügt hier Elementinitialisierung ein
    	//}}AFX_DATA_INIT
    
    }
    
    void DVST_Beschreibung::OnVSTProtokolle() 
    {
    
    	OnVSTSpeichern();
    
    	m_pPar->Protokol();
    }
    

    Wie kann ich dieses verhindern?



  • DStoffliste m_DStoffliste sollte eine Membervariable von CEinlesenDlg sein...

    Devil



  • Für das korrekte verhalten iust nur notwendig, das "this" (im DoModal-Aufruf) tatsächlich der DStoffliste-Dialog ist. Hier muß (muß muß muß) das Owner-Fenster des modalen Dialoges angegeben werden.

    Wo hast du m_pPar her?


Anmelden zum Antworten