Funktion verlassen, Ausführung abbrechen
-
Moin!
Ich stehe vor folgendem Problem: In einer dialogfeldbasierenden Anwendung wird durch Klick auf OK (über Modem) eine Verbindung zu einem externen Gerät aufgebaut und dabei Statusmeldungen in einem neuen Fenster ausgegeben. Falls eine bestimmte Check-Box aktiviert ist, wird noch eine Passwortabfrage vorgeschaltet.void CConnectAppDlg::OnOK() { if(IsDlgButtonChecked(IDC_DIAGNOSE) == TRUE) { CDiagnosePasswort Abfrage; Abfrage.DoModal(); } if(...) { //Hier wird die Modemverbindung sowie das Fenster mit den Statusmeldungen //erzeugt. } } Und die Passwortprüfung: void CDiagnosePasswort::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CDiagnosePasswort) DDX_Text(pDX, IDC_PASSWORT, m_Passwort); DDX_Text(pDX, IDC_USER_NAME, m_UserName); //}}AFX_DATA_MAP if(pDX->m_bSaveAndValidate) { CString user, passwort; GetDlgItemText(IDC_PASSWORT, passwort); GetDlgItemText(IDC_USER_NAME, user); if((user != "aaa") || (passwort != "bbb")) { AfxMessageBox("Fehlerhafte Eingabe!"); pDX->Fail(); } } }
Bei Eingabe der richtigen Benutzerdaten läuft alles wie gewünscht. Wenn aber in der Passwortprüfung auf "Abbrechen" geklickt wird, soll die Modemverbindung nicht aufgebaut werden und das Fenster mit den Statusmeldungen soll auch nicht erscheinen. Es soll aber die Anwendung erhalten bleiben, so daß der Benutzer z.B. die Checkbox deaktivieren kann um die Verbindung ohne Passwortprüfung aufzubauen.
Ich habe schon mit Funktionen wie EndDialog und DestroyWindow herumexperimentiert, aber ohne Erfolg. Vielleicht hat ja jemand eine Idee.
Danke.
[ Dieser Beitrag wurde am 05.02.2003 um 14:17 Uhr von Unix-Tom editiert. ]
-
Du solltest den Rückgabewert der Funktion Abfrag.DoModal() prüfen. Nämlich so:
if (Abfrage.DoModal()==IDOK) //dann wurde OK gedrückt { } if (Abfrage.DoModal()==IDCANCEL) //dann wurde Abbrechen gedrückt { }
Oh, da war einer schneller.
[ Dieser Beitrag wurde am 05.02.2003 um 14:24 Uhr von chefe editiert. ]
-
Ich verstehe zwar nicht ganz was du meinst aber checke den rückgabewert des dialogs
int nResponse = dlg.DoModal(); if (nResponse == IDOK) { } else if (nResponse == IDCANCEL) { }
-
Hi,
Die Funktion DoModal() gibt einen Integerwert zurück.
Nehmen wir mal an, dein Abbrechen-Button hat die ID: "IDCANCEL".
dann kannst du mit:........ if(Abfrage.DoModal() == IDCANCEL) { // das, was passieren soll, wenn er auf Abbrechen gedrückt hat } else { ....... } ......
Wenn du das Dialogfeld wie oben mit OnCancel() beendest gibt DoModal "IDCANCEL" zurück, wenn du es mit OnOK() beendest, wird "IDOK" zurückgegeben.
Ich hoffe, dass dir das weiterhilft.
mfg TakeItEasy!
Edit:
Kommt davon, wenn man so lange für einen Beitrag braucht[ Dieser Beitrag wurde am 05.02.2003 um 14:27 Uhr von takeiteasy editiert. ]
-
Hallo Leute,
ich habe die Sache inzwischen, allerdings etwas umständlicher, hinbekommen.
Ich bin aber nicht auf den Trichter gekommen den Rückgabewert von DoModal() zu prüfen. Das ist sicherlich eleganter.Vielen Dank!