Problem beim Schließen von wxMDIChildFrame



  • Hallo zusammen,
    ich habe ein Programm mit MDI erstellt.
    Schließe ich ein Child ansich, wird eine Abfrage erzeugt, ob das Dokument gespeichert werden soll. Das Funktioniert auch, danach ist im Parent Frame das entsprechende Child zerstört.

    Wenn ich das Hauptfenster schließe, sollen alle noch geöffneten Childs ein Close Aufruf erhalten, sodass jedes einzelne Dokument, wie oben beschrieben, gespeichert werden kann. Jedoch gerate ich in meiner Routine in eine Endlosschleife, da ActiveChild immer dasselbe Childfenster zurückgibt, da es noch nicht geschlossen wurde.

    Hier die OnClose-Rounte im ChildFrame:

    if(m_bChanged)
    	{
    		filename = GetTitle();
    
    		ausgabe = wxString::Format("Wollen Sie das Dokument %s speichern?", filename);
    
    		wxMessageDialog* dialog = new wxMessageDialog(this,
    			ausgabe, "Achtung", wxYES_NO|wxCANCEL);
    
    		answer = dialog->ShowModal();
    		dialog->Destroy();
    	}
    
    	switch (answer)
    	{
    		case wxID_YES:      // Save, then destroy, quitting app
    		{
    			wxCommandEvent event;
    			OnFileSave(event);
    			if(!m_bHasSavePath)
    				this->Destroy();
    			break;
    		}
    		case wxID_NO:       // Don't save; just destroy, quitting app
    		{
    			this->Destroy();
    			break;
    		}
    		case wxID_CANCEL:   // Do nothing - so don't quit app.
    		default:
    		{
    			if (!event.CanVeto()) // Test if we can veto this deletion
    				this->Destroy();    // If not, destroy the window anyway.
    			else
    				event.Veto();     // Notify the calling code that we didn't delete the frame.
    			break;
    		}
    	}
    

    Auszug aus der OnClose-Routine des ParentFrames:

    wxMDIChildFrame *pframe = GetActiveChild();
    while(pframe != (wxMDIChildFrame*)0)
    {
        pframe->Close(); // in der OnClose Routine wird nun die Abfrage für das Speichern erzeugt
        pframe = GetActiveChild();
    }
    
    wxMDIParentFrame::OnCloseWindow(event);
    

  • Mod

    Bietet wxMDIParentFrame keine Möglichkeit durch die Fenster zu navigieren?
    Schon mal ActivateNext() versucht?



  • habe es jetzt mal mit ActivateNext versucht... das Problem ist, dass die Funktion bei nur einem Child nicht weiternavigiert (macht ja auch sinn). Bei mehreren Childs navigiert er zwar weiter, aber das Child wird nicht geschlossen, d.h. ich befinde mich weiterhin in der Endlosschleife.


Log in to reply