Dialog endet nicht
-
Hallo,
mein Dialog lässt sich irgendwie nicht beenden, ich lasse in einer while-Schleife den Benutzer einen Pfad zu ner Datei angeben und überprüfe dann bei Ok, ob die Datei vorhanden ist, falls nicht, darf er den Pfad erneut eingeben. Durch Abbrechen soll der Benutzer das Programm beenden können. Das Problem dabei ist, dass CDialog::OnCancel() das Programm nicht beendet und ich somit in ner Endlosschleife stecke. Mit exit will ichs eigtl. aber nicht beenden, da ich sonst memory leaks angezeigt bekomme.
Gruss CatDog
-
Wieso (und wo?!) benutzt du denn eine while-Schleife? Du kannst doch einfach ein Edit-Control platzieren, in dem der User den Pfad eingeben soll. Überprüft wird die Eingabe dann beim Klicken eines Buttons.
-
Ich kann ohne die Datei nicht weitermachen, deshalb die while Schleife, aber eigtl. müsste ich das Programm doch beenden können. Das Ganze sieht so aus:
CFileFind fileDatei; INT_PTR iRet = NULL; while (!fileDatei.FindFile(m_strPfas)) { CMyDlg myDialog(); iRet = myDialog.DoModal(); if (iRet == IDCANCEL) { OnCancel(); } else if (iRet == IDOK) { //kann weiter machen break; } }Eigtl. müssta das doch klappen oder ?
-
Du solltest dein Programm ein wenig umstrukturieren. Windows und die MFC funktionieren ereignisgesteuert, da sind solche Schleifenkonstrukte eher fehl am Platz (u.a. sorgst du für 100% CPU-Auslastung und verhinderst weitere User-Eingaben). In einem DOS- oder Konsolen-Programm würde man das so machen, in Windows eher nicht.
Erzeuge einen Button, der die weitere Verarbeitung einleiten soll (also z.B. die Datei öffnen o.ä.). Am Anfang des Eventhandlers für diesen Button fragst du ab, ob im Edit-Control ein gültiger Pfad hinterlegt ist. Wenn nicht, brichst du ab und gibst z.B. eine Meldung aus ("Bitte erst Pfad eingeben!"). So wartest du auch auf eine korrekte Eingabe, aber ohne störende Seiteneffekte.
Das Problem mit dem Beenden des Programms wird sich dann vielleicht von selbst erledigen.