Wie beende ich ein Dialogfenster-Programm?
-
Windows MFC
In ner Anleitung hab ich gelesen dass eine Funktion OnCLose() geerbt werden kann ..was irgendwie nicht geht.
-
Ich bin mir nicht ganz sicher, aber versuch mal
NameDesFensters.Close();
-
uahah...geht nicht. Also das gibts doch nicht - das kann doch nicht unmöglich sein. Ich will einfach ein Menü, bei dem durch klicken auf Datei-Beenden das Programm beendet wird
-
Hallo
du hast immer noch nicht gemerktdas du im flaschen Subforum gepostest hast. Hoffentlich verschiebt dich ein Mod bald.
bis bald
akari
-
std::exit (0);aus cstdlib.
Aber normalerweise sollte sich soetwas automatisch aus dem "Programmfluss" ergeben.
-
Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum MFC (Visual C++) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Dann kommt:
error C2039: 'exit': Ist kein Element von 'std'
-
Füg einen Button ein, mach nen Doppelklickdrauf, übernehme den Funktionsnamen den er Dir anbietet, und schreibe folgendes:
void CSystemzeitDlg::OnButton2() { OnOK(); }
-
Dann kommt:
error C3861: "OnOK": Bezeichner wurde nicht gefunden.
-
Wenn auch
CDialog::OnOK();nicht geht, dann ist das kein Dialog.
-
Naja, dann kommen eben zwei Fehlermeldungen:
-Kein Zugriff auf protected Member, dessen Deklaration in der CDialog-Klasse erfolgte
-nzulässiger Aufruf einer nicht statischen Memberfunktion
Gibt es dafür eigentlich keinen Standardbefehl wie exit/killapp/close usw.?
-
lol ? Also
CDialog::OnOK();kann in der tat nicht gehen -.-
OnOK();das muss gehen... solange du auch wirklich in einer von CDialog abgeleiteten Klasse bist...
PostQuitMessage(0)geht auch... unschön

SendMessage(WM_CLOSE);geht auch...
-
Dialoge werden mit EndDialog beendet. Letzten Endes rufen OnOk, OnCancel, und der OnClose Handler diese Funktion auf.
BTW: PostQuitMessage ist wieder mal einfach nur fehl am Platz. Ich verstehe nicht warum dies immer wieder hier empfohlen wird. Man muss nur die Klasse nochmal verwenden und schon beendet es einem die Nachrichtenschleife. Zudem kann man in diesem Fall nicht mal mehr ene Fehlermeldungsdialog anzeigen.
Just my 2 cents.
-
Hey Martin... kannst net mehr lesen? Was meinst de was ich mit Unschön meine? ... Aber hast recht... EndDialog hab ich glatt vergessen...
-
(D)Evil schrieb:
lol ? Also
CDialog::OnOK();kann in der tat nicht gehen -.-
Hmm?

Das muss ich Morgen früh mal nachgucken...
-
Normal sollte es nicht gehen... ist ja nicht static... also bei mir meckert er auch in nem Dlg

-
(D)Evil schrieb:
Normal sollte es nicht gehen... ist ja nicht static... also bei mir meckert er auch in nem Dlg

So, ich habe mal geguckt - bei mir geht es wirklich:
void FehlerDlg::OnOK() { // Der Rest der Funktion CDialog::OnOK(); }Wie willst du denn sonst Funktionen der Basisklasse aufrufen?

Würde ich da oben nur OnOK() aufrufen, hätte ich nen Stack Overflow. :pSchau mal z.B. in ne OnInitDialog, da siehst du das auch. (Und in zig anderen Funktionen, immer wenn explizit die Basisklasse gefordert wird.)

-
(D)Evil schrieb:
Hey Martin... kannst net mehr lesen? Was meinst de was ich mit Unschön meine?
Sry habe ich übersehen!
-
estartu
Jo hast recht... daran hatte ich jetzt nicht gedacht
-
ok, habe festgestellt dass jetzt garkeine Befehle mehr über das Menü ansteuerbar sind, obwohl es zuvor noch ging....sehr seltsam.