Was beendet den Dialog?



  • Ich brauche im Prinzip so eine Funktion wie OnOK bzw OnCancel. Die beiden verwende ich schon anderweitig, also muss eine dritte her.

    OnOK -> Macht den nächsten Dialog auf
    OnCancel -> Schließt alle Dialoge
    On??? -> Schließt nur den aktuellen Dialog

    OnClose funktioniert aus irgendeinem Grund nicht. 😞



  • Hm, ruf doch einfach CDialog::OnOk/OnCancel auf.
    Oder geht das nicht, weil du irgendwo den returnwert von domodal abfragst ?

    Devil



  • Könntest du dir nicht einfach ne' eigene Funktion schreiben die den Dialog Cancelt ?

    void CTestDlg::OnCloseForegroundDialog()
    {
       GetForegroundWindow()->PostMessage(0, WM_CLOSE, 0, 0);
    }
    

    Wäre doch denkbar ... 😕

    Gruß
    :: NoName ::



  • devil81 schrieb:

    Hm, ruf doch einfach CDialog::OnOk/OnCancel auf.
    Oder geht das nicht, weil du irgendwo den returnwert von domodal abfragst ?

    Devil

    Wüsste ich auch gern, du kannst doch OnOK() hinsetzen, wie und wo du willst! WO der Dialog beendet wird ist dem Dialog ziemlich egal. Es sei denn, du brauchst einen Returnwert (s.o.), den du aber auch anders zurückgeben kannst (Public Variable im Parent deklarieren, Zeiger im Dialog auf Parent holen, Variable Wert zuweisen), dann aber nicht über domodal.

    Gruß Bernd



  • Ach, jetzt hab ich das verstanden! Du machst das Öffnen des neuen Dialogs vom Rückgabewert von DoModal abhängig und kannst deswegen keine weiteren OnOKs einbauen!? Kann man einen Dialog nicht auch über this->Destroy() oder ähnlich quittieren? Ist doch von CWnd abgeleitet!



  • Die Frage scheint zwar beantwortet zu sein, aber hier nochmal der Aufruf zum Angucken:

    int nRet = dlg.DoModal();
    		switch(nRet)
    		{
    		case IDOK:
    			UebertrageDaten(true);
    			CBasisDlg::OnOK();
    			break;
    		case IDCANCEL:
    			CBasisDlg::OnCancel();
    			break;
    		default:
    			break;
    		}
    

    Stimmt mit einer Variablen kann ich das auch noch machen - ein einfaches Zumachen wäre mir allerdings deutlich lieber...

    Nachtrag:

    SendMessage(WM_CLOSE);
    

    hat EXAKT die selbe Wirkung wie OnCancel. 😞
    Naja, dann baue ich jetzt eine Variable ein. 🙄


Anmelden zum Antworten