Wie um zu verhindern, MFC-Dialogfeld schließen auf Enter-und der Escape-Taste?
Ich kenne eine Methode zum verhindern einer MFC-Dialogfeld geschlossen, wenn die Enter oder Esc - Tasten gedrückt werden, aber ich würde gerne wissen, mehr details der Prozess-und alle gängigen alternativen Methoden das zu tun.
Vielen Dank im Voraus für jede Hilfe.
InformationsquelleAutor der Frage Laxman Sahni | 2013-07-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn der Benutzer drückt Enter-Taste in einem dialog zwei Dinge können passieren:
CDialog::SetDefID()
). Dann eine WM_COMMAND mit der ID für dieses Steuerelement wird an den dialog.Mit der ersten option kann es passieren, dass die Standard-Steuerung hat eine ID gleich IDOK. Dann werden die Ergebnisse die gleichen, die in der zweiten option.
Standardmäßig, Klasse
CDialog
hat einen handler für dieWM_COMMAND(IDOK)
Aufruf zuCDialog::OnOk()
das ist eine virtuelle Funktion, und standardmäßig ruft esEndDialog(IDOK)
schließt den dialog.Also, wenn Sie wollen vermeiden, dass der dialog geschlossen wird, führen Sie einen der folgenden Schritte aus.
IDOK
.WM_COMMAND(IDOK)
dass nicht nennenEndDialog()
.CDialog::OnOk()
und rufen Sie nicht die Basis der Umsetzung.Über IDCANCEL, es ist ähnlich, aber es ist nicht gleichwertig
SetDefID()
- und die ESC-Taste ist fest verdrahtet. So zu vermeiden, der dialog wird geschlossen:WM_COMMAND(IDCANCEL)
dass nicht nennenEndDialog()
.CDialog::OnCancel()
und rufen Sie nicht die Basis der Umsetzung.InformationsquelleAutor der Antwort rodrigo
Gibt es eine alternative zu der vorherigen Antwort, die ist nützlich, wenn Sie wollen immer noch einen OK /Schließen-button. Wenn Sie überschreiben Sie die PreTranslateMessage-Funktion, können Sie fangen die Verwendung von VK_ESCAPE /VK_RETURN etwa so:
InformationsquelleAutor der Antwort The Forest And The Trees
Ich einfach überschreiben OnOk Ereignis und statt der übergabe der Nachricht an den übergeordneten dialog, nichts zu tun.
Es ist also im Grunde einfach wie tun:
Dieser soll verhindern, dass das Dialogfeld geschlossen, wenn beim drücken der return/enter-Taste.
InformationsquelleAutor der Antwort Gilad Reich