OnNewDocument



  • Wenn ich das so schreibe...:

    BOOL CTEST_SIMDoc::OnNewDocument()
    {
    	auswahlDlg.DoModal();
    	if (!CDocument::OnNewDocument())
    		return FALSE;
    
    	return TRUE;
    }
    

    ...wird mein Dialog schon beim Starten des Programms das erste mal aufgerufen!
    Wie kann ich das verhindern! So das mein Dialog erst kommt wenn ich wirklich auf "New" klicke!? 😕



  • BOOL CTEST_SIMDoc::OnNewDocument()
    {
    static bool auswahl = 0;

    if(auswahl)
    {
    auswahlDlg.DoModal();
    auswahl = 1;
    }

    if (!CDocument::OnNewDocument())
    return FALSE;

    return TRUE;
    }



  • BOOL CTEST_SIMDoc::OnNewDocument() 
    { 
    static bool auswahl = 0; 
    
        if(auswahl) 
        { 
            auswahlDlg.DoModal(); 
            auswahl = 1; 
        } 
    
    if (!CDocument::OnNewDocument()) 
    return FALSE; 
    
    return TRUE;
    

    }



  • Soweit ich weiß liegt das daran, dass OnNewDocument nach OnCreate aufgerufen wird. Somit kommt Dein Dialog immer. Aber:

    BOOL CTEST_SIMDoc::OnNewDocument() 
    { 
    static bool auswahl = 0; 
    
        if(auswahl) 
        { 
            auswahlDlg.DoModal(); 
            auswahl = 1; 
        } 
    
    if (!CDocument::OnNewDocument()) 
    return FALSE; 
    return TRUE; 
    }
    

    dürfte gar nicht funktionieren, da auswahl nie vor dem if true werden kann. Auswahl müsste global definiert werden und dann irgendwo nach der ganzen Initialisierung true gesetzt werden.



  • In der Art habe ich das mal gemacht:

    BOOL CWalzeDoc::OnNewDocument()
    {
    	if (!CDocument::OnNewDocument())
    		return FALSE;
    
    	// ZU ERLEDIGEN: Hier Code zur Reinitialisierung einfügen
    	// (SDI-Dokumente verwenden dieses Dokument)
    		// neues Dokument erzeugen
    
    	// Allgemeine Daten vorbelegen
    	if(m_WalzenLaenge == 0.0){
    		m_WalzenTyp 			= SPIRALWALZE;
    		m_WalzenLaenge 			= 600.0;
    		m_WalzenDurchmesser 	= 125.0;
    	}
    	else{
    		// Dialog zur Eingabe der allgemeinen Walzendaten aufrufen
    		CAllgemeinDlg Dia;
    		Dia.m_WalzenTyp = m_WalzenTyp;
    		Dia.m_WalzenLaenge = m_WalzenLaenge;
    		Dia.m_WalzenDurchmesser = m_WalzenDurchmesser;
    
    		Dia.DoModal();
    		SetModifiedFlag();
    
    		m_WalzenTyp = Dia.m_WalzenTyp;
    		m_WalzenLaenge = Dia.m_WalzenLaenge;
    		m_WalzenDurchmesser = Dia.m_WalzenDurchmesser;
    	}
    
    ...
    

    m_WalzenLaenge wird im Konstruktor der Doc-Klasse auf 0.0 gesetzt.
    Beim Ersten Aufruf (beim Programmstart) werden somit die Default-Werte verwendet, bei einem weiteren Aufruf (z.B. per Menü / Toolbar) wird dann der Dialog angezeigt.

    So ähnlich, eventuell mit einer BOOL-Member Variable (m_ErsterAufruf) müsste das gehen...



  • BOOL CTEST_SIMDoc::OnNewDocument() 
    { 
    static bool auswahl = 0; 
    
        if(auswahl) 
        { 
            auswahlDlg.DoModal(); 
        } 
    
    auswahl = 1; 
    
    if (!CDocument::OnNewDocument()) 
    return FALSE; 
    return TRUE; 
    }
    


  • heimwerker schrieb:

    BOOL CTEST_SIMDoc::OnNewDocument() 
    { 
    static bool auswahl = 0; 
    
        if(auswahl) 
        { 
            auswahlDlg.DoModal(); 
        } 
    
    auswahl = 1; 
    
    if (!CDocument::OnNewDocument()) 
    return FALSE; 
    return TRUE; 
    }
    

    Der sieht aber auch ein klein wenig anders aus wie der da:

    BOOL CTEST_SIMDoc::OnNewDocument() 
    { 
    static bool auswahl = 0; 
    
        if(auswahl) 
        { 
            auswahlDlg.DoModal(); 
            auswahl = 1; 
        } 
    
    if (!CDocument::OnNewDocument()) 
    return FALSE; 
    return TRUE; 
    }
    

    Ist gut möglich das es so auch funktioniert.


Anmelden zum Antworten