Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Wie kann man denn die Esc Taste abfangen?

Habe eine neue Funktion erstellt:

void CDialog::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)

Wie gehts jetzt wieter? Wie reagiert die Funktion speziell auf die Esc Taste?

Geschrieben

Ja ich lese das schon. Aber verstehen tu ichs nicht.

Ich kann nicht so super gut programmieren.

Und es stört doch nicht wenn ichs da rein schreibe,oder?

Wenn mir jemand helfen mag kann er's tun und wenn nicht kann mans ja überlesen...

Ich habe mir einen Haltepunkt in der Funktion OnKeyDown gesetzt.

Aber ich kann alle Tasten drücken und erreiche den Punkt nicht.

Wieso???

Mache jetzt Feierabend.

Noch einen schönen Abend.

Bye

Geschrieben

Tastaturnachrichten gehen an das Fenster, das den "Fokus" hat. Das ist mit hoher Wahrscheinlichkeit nicht dein Dialog, sondern eines der Steuerelemente auf dem Dialog.

Warum willst du denn die Escape-Taste abfangen.

Geschrieben

Guten Morgen!!

Ja den Fokus hat ein Button.

Und wenn man Esc drückt geht der Dialog zu.

Davon abgesehen soll aber ein Steuerelement ausgeblendet werden, wenn man die Esc Taste drückt.

PS: Bei meiner Button Klasse gibts ja nur BN_CLICKED und BN_DOUBLECLICKED.

Keine Tastaturnachricht.... Und nun?

Geschrieben
Ja den Fokus hat ein Button.

Und wenn man Esc drückt geht der Dialog zu.

Davon abgesehen soll aber ein Steuerelement ausgeblendet werden, wenn man die Esc Taste drückt.

Es ist aber das Standardverhalten unter Windows: Modale Dialoge schließen sich, wenn man die Escape-Taste drückt. Davon solltest du nicht ohne guten Grund abweichen. Benutzer, die gut mit der Tastatur umgehen können, dürften sich über dieses Verhalten zumindest wundern.

PS: Bei meiner Button Klasse gibts ja nur BN_CLICKED und BN_DOUBLECLICKED.

Keine Tastaturnachricht.... Und nun?

Du bekommst in Dialogen keine Tastaturnachricht für die Escape-Taste. Die wird schon vorher in einen Schließbefehl übersetzt. Du könntest das in PreTranslateMessage abfangen, aber ich empfehle dringend, das nicht zu tun.

Kannst du keine andere Taste dafür benutzen?

Geschrieben

Wenn es um das aufhalten des schließens in irgendeiner art geht, kann man doch alternativ auch im OnClose/OnHide/OnUnload Ereignis (oder wie es im Compiler halt heißt) das ganze abfangen, oder?

Geschrieben
Es ist aber das Standardverhalten unter Windows: Modale Dialoge schließen sich, wenn man die Escape-Taste drückt. Davon solltest du nicht ohne guten Grund abweichen. Benutzer, die gut mit der Tastatur umgehen können, dürften sich über dieses Verhalten zumindest wundern.

Du bekommst in Dialogen keine Tastaturnachricht für die Escape-Taste. Die wird schon vorher in einen Schließbefehl übersetzt. Du könntest das in PreTranslateMessage abfangen, aber ich empfehle dringend, das nicht zu tun.

Kannst du keine andere Taste dafür benutzen?

Wieso Empfielst Du mir das nicht?

Ich hatte Dir doch mal mein Programm geschickt, erinnerst Du Dich?

Der Anmededialog war das Hauptfenster und das für den Benutzer eigetliche Hauptfenster mit allen Infos wird vom Anmeldedialog Modal geöffnet.

Wie funktioniert das mit dem PreTranslateMessage? Wie frage ich dann die Esc Taste ab?

BOOL CPatient::PreTranslateMessage(MSG* pMsg)

{

if (&pMsg->message == "Esc")

{

;)

Geschrieben
Wieso Empfielst Du mir das nicht?
Weil damit deine Benutzeroberfläche vom Windows-Standard abweicht. Und das sollte man nicht ohne guten Grund tun. Ich würde mich sehr wundern, wenn ich einen Dialog nicht mit der Escape-Taste schließen könnte.

Wie funktioniert das mit dem PreTranslateMessage? Wie frage ich dann die Esc Taste ab?

Du prüfst den Nachrichtentyp (pMsg->message) auf WM_KEYDOWN. Falls der passt, kannst du in den anderen Membern nachsehen, ob es die richtige Taste ist. Was da drin steht, hängt vom Nachrichtentyp ab, aber das ist in der MSDN Library dokumentiert. Bei WM_KEYDOWN steht in pMsg->wParam der virtuelle Tastencode.

Entscheidend ist, was du aus PretranslateMessage zurückgibst. Wenn die Nachricht normal behandelt werden soll, gibst du 0 zurück, ansonsten irgendeinen anderen Wert.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...