Simple Frage
-
beginne mit MFC, schreibe eine Dialog-Applikation - und frage mich, wie ich es verhindern kann, daß das Programm bei jedem RETURN und ESCAPE abbricht.
Wo findet sich der Code dafür?
-
Aloha,
vorab, was soll denn Dein Dialog bezwecken?
Bei return/enter bricht dat Programm ja nur ab, wenn der "OK" oder "Abbrechen" Button selektiert ist.
OnOk() oder OnCancel()überschreiben. Aber das ist sehr pauschal, weil ich nicht weiß, was Du mit deinem Proggi machen willst.
Um das "Escape" abzufangen kannst Du z.B. die PreTranslateMessage überschreiben.
BOOL CDeinDialogDlg::PreTranslateMessage(MSG* pMsg) { if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_ESCAPE){ return NULL; } return CDialog::PreTranslateMessage(pMsg); }Beste Grüße
BOA
-
was das Programm soll, ist in diesem Zusammenhang ganz nebensächlich, verkomplizierte die einfache Frage eigentlich nur.
ich habe schon verstanden, daß OnOk() den Prozeß terminiert.
Dennoch finde ich diese Code-Zeile (es sei denn, ich weise sie selsbt einem Button zu) nirgends erwähnt.
Dennoch bricht das Programm (automatisch) mit ESC und RETURN ab.
Ich finde auch keine WM_CHAR Erwähnung (die es ja in MFC ohnehin nicht mehr gibt).Woran liegt's?
-
Novarice schrieb:
Wo findet sich der Code dafür?
In der FAQ!
-

Habe dort gesucht, aber nix gefunden (jedenfalls nicht unter den Stichwörtern RETURN oder ESCAPE)
-
Ok,
soll Dein Programm laufen bis Windows heruntergefahren wird ????

Irgendwie muß es doch abbrechen.
Entweder auf "Escape" oder auf "onok()" oder "oncancel".Natürlich könntest Du auch ein EndDialog(IDOK) nach einer gewissen Zeit aufrufen, oder auf einen anderen Button legen, oder sonstwas.
Außerdem habe ich Dir die Antwort gegeben. Bei OnOK() einfach
// CDialog::OnOK();bei "Escape" wie oben angegeben und schon bricht es nicht mehr ab.
Grüße
BOA
-

wollte nicht unhöflich sein.
Zum Zusammenhang: Habe im Dialg ein Textfeld, das einen String aufnimmt.Üblicherweise beendet man texteingabe mit RETURN - und blöderweise bricht das Programm nach der Texteinagebe jedesmal ab (wie überhaupt, wenn ich die RETURN-Taste drücke).
(PreMessage habe ich im Dialog-Code nicht gefunden)Grüße + Dank
-
Ahhh,
alles klar.
Du mußt dem Editfeld auf jeden Fall in den Eigenschaften
"Mehrzeilig" und
"Return möglich"anbieten.
Bist Du dann im Editfeld, kannst Du Return drücken, bis der Speicher überläuft.
Die PreTranslateMessage kannst Du mit dem Klassenassi(CTRL+W) erstellen.
Dann einfach die Funktion hinzufügen.Schon kannst Du das böse Escape abfangen.
Grüße
BOA
-

BOA, herzlichen Dank!
-
Immer gerne,
aber nur wenn Du Dich registrierst ( ich bekomme 10 € für jede Anwerbung
)...Nur Spasssssss
Grüße
BOA