Gast
2005-09-29, 09:59:08
Hallo,
ich möchte in einem Programmfenster eine Edit-Box realisieren, bei der nach abgeschlossener Texteingabe durch Drücken der Return-Taste die Routine zum Verarbeiten des eingegebenen Textes aufgerufen wird (die also mittels GetWindowText() den Text aus der Edit-Box ausliest). Etwa so wie im Internet Explorer nach Eingabe des Textes in die Addresszeile durch Drücken der Return-Taste die Verarbeitung der Texteingabe (also das Ansteuern der eingegebenen URL) ausgelöst wird.
Nur habe ich überhaupt keine so rechte Idee wie das gehen soll. Ich hatte schon in Erwägung gezogen, es über die Ereignisbehandlungsroutine des Parent-Fensters für WM_KEYDOWN zu versuchen, in die geht das Programm aber bei Tastatureignissen innerhalb der Edit-Box offenbar gar nicht rein.
Dann kam mir die Idee, die Ereignisbehandlungsroutine der Edit-Box selbst zu verändern, indem ich von CEdit eine Klasse CReturnEdit ableite und deren OnKeyDown-Routine überschreibe.
Dabei treten aber noch zwei Probleme auf:
- in der MSDN habe ich zwar rein gar nichts gefunden, das mich bei der Umsetzung meines Vorhabens weiterbringen würde (eigentlich findet man so was in Programmen doch recht häufig vor, da mutet es schon etwas eigenartig an daß in der MSDN nichts dazu zu finden ist), dafür etwas anderes, nämlich daß eine Edit-Box auf Betätigungen von Tasten mit Keycodes kleiner als 0x20 - und das schließt die Return-Taste mit ein, die hat 0x0D - gar nicht annimmt (und dann wohl auch nicht an ihre WM_KEYDOWN-Routine weiterleiten kann), sofern sie nicht auf mehrzeiligen Style eingestellt ist. Geht das demnach nur mit mehrzeiligem Stil?
- im Parent-Fenster bewirkt das Drücken der Return-Taste (auch wenn der Focus gerade auf einem Child-Fenster wie der Edit-Box liegt) das Auslösen der Routine für das Anklicken des Default-Buttons. Wie kann man das abschalten?
In Zusammenhang mit dem zweiten Problem ist mir da noch eine weitere Idee gekommen: ich füge einen Dummy-Button ein, dessen BN_CLICKED-Routine die gewünschte Verarbeitung des Textes in der Edit-Box auslöst. In der EN_SETFOCUS-Routine der Edit-Box stelle ich dann den Default-Button des Parent-Fenster auf den Dummy-Button um, so daß ein Drücken der Return-Taste die gleiche Wirkung wie ein Klick auf den Dummy-Button hat. In der EN_KILLFOCUS-Routine der Edit-Box setze ich den Default-Button dann zurück. Während die Edit-Box den Focus hat, sollte das Drücken der Return-Taste dann den gewünschten Effekt haben.
Kann man das so realisieren?
ich möchte in einem Programmfenster eine Edit-Box realisieren, bei der nach abgeschlossener Texteingabe durch Drücken der Return-Taste die Routine zum Verarbeiten des eingegebenen Textes aufgerufen wird (die also mittels GetWindowText() den Text aus der Edit-Box ausliest). Etwa so wie im Internet Explorer nach Eingabe des Textes in die Addresszeile durch Drücken der Return-Taste die Verarbeitung der Texteingabe (also das Ansteuern der eingegebenen URL) ausgelöst wird.
Nur habe ich überhaupt keine so rechte Idee wie das gehen soll. Ich hatte schon in Erwägung gezogen, es über die Ereignisbehandlungsroutine des Parent-Fensters für WM_KEYDOWN zu versuchen, in die geht das Programm aber bei Tastatureignissen innerhalb der Edit-Box offenbar gar nicht rein.
Dann kam mir die Idee, die Ereignisbehandlungsroutine der Edit-Box selbst zu verändern, indem ich von CEdit eine Klasse CReturnEdit ableite und deren OnKeyDown-Routine überschreibe.
Dabei treten aber noch zwei Probleme auf:
- in der MSDN habe ich zwar rein gar nichts gefunden, das mich bei der Umsetzung meines Vorhabens weiterbringen würde (eigentlich findet man so was in Programmen doch recht häufig vor, da mutet es schon etwas eigenartig an daß in der MSDN nichts dazu zu finden ist), dafür etwas anderes, nämlich daß eine Edit-Box auf Betätigungen von Tasten mit Keycodes kleiner als 0x20 - und das schließt die Return-Taste mit ein, die hat 0x0D - gar nicht annimmt (und dann wohl auch nicht an ihre WM_KEYDOWN-Routine weiterleiten kann), sofern sie nicht auf mehrzeiligen Style eingestellt ist. Geht das demnach nur mit mehrzeiligem Stil?
- im Parent-Fenster bewirkt das Drücken der Return-Taste (auch wenn der Focus gerade auf einem Child-Fenster wie der Edit-Box liegt) das Auslösen der Routine für das Anklicken des Default-Buttons. Wie kann man das abschalten?
In Zusammenhang mit dem zweiten Problem ist mir da noch eine weitere Idee gekommen: ich füge einen Dummy-Button ein, dessen BN_CLICKED-Routine die gewünschte Verarbeitung des Textes in der Edit-Box auslöst. In der EN_SETFOCUS-Routine der Edit-Box stelle ich dann den Default-Button des Parent-Fenster auf den Dummy-Button um, so daß ein Drücken der Return-Taste die gleiche Wirkung wie ein Klick auf den Dummy-Button hat. In der EN_KILLFOCUS-Routine der Edit-Box setze ich den Default-Button dann zurück. Während die Edit-Box den Focus hat, sollte das Drücken der Return-Taste dann den gewünschten Effekt haben.
Kann man das so realisieren?