2011-01-02 6 views
5

Grundsätzlich möchte ich eine Enter, um eine Nachricht auszulösen, die ich fangen kann, wenn ein Bearbeitungssteuerelement Fokus und ein Benutzer drücken Sie die Eingabetaste. Alle Online-Lösungen scheinen über Unterklassen zu sein, aber ich fragte mich, ob es einen anderen Weg gab?Win32 C++ Erkennung "Enter" in einem Bearbeitungssteuerelement ohne Unterklasse?

Zum Beispiel hat meine Schaltfläche eine ID ID_BUTTON_SEND. So stelle ich es mir vor;

case WM_COMMAND: 
    switch (LOWORD(wParam)) 
      case ID_BUTTON_SEND 
       if ('enter was pressed') 
         do this 
       else 
         default 

... Sie auf die Idee :) Ich habe die http://support.microsoft.com/kb/102589 aber ehrlich gesagt Option 1 dosn't machen viel Sinn für mich zu lesen.

Prost

Antwort

3

Der beste Weg, dies zu fangen ist, bevor Translate aufgerufen wird. Wenn Sie MFC verwenden, überschreiben Sie CWnd :: PreTranslateMessage. Wenn Sie nur die Win API verwenden, checken Sie einfach in Ihre Nachricht ein, was die Nachricht vor dem Aufruf von TranslateMessage enthält.

+0

Welche Nachricht suche ich? WM_CHAR, WM_KEYPRESS oder so? Auch - hat dies eine Auswirkung auf die Leistung, diese Überprüfung für jedes Mal, wenn eine Nachricht empfangen wird? – KaiserJohaan

+0

Mach dir keine Sorgen über Leistungsprobleme, sie sind nachlässig. Allerdings habe ich vergessen, welche Nachricht zu suchen :), aber da es noch nicht tranaslated wurde ich denke, WM_KEYDOWN wäre derjenige, nach dem zu suchen. (oder WM_KEYUP auch). – kellogs

3

Sie könnten das Fokusänderungsereignis auffangen, und wenn das Bearbeitungssteuerelement das Fokusereignis erhält, ändern Sie einfach die Standardschaltfläche für den Dialog auf die Schaltfläche * ID_BUTTON_SEND *. Wenn der Fokus verloren ist, entfernen Sie diese Standardschaltflag.

Das würde bedeuten, dass der Dialog automatisch die * ID_BUTTON_SEND * Standardschaltfläche auslöst, wenn der Benutzer die Eingabetaste drückt, wenn das Bearbeitungssteuerelement die FOKs enthält.

Sie können die Schaltfläche die Standardschaltfläche machen, indem die BS_DEFPUSHBUTTON zum GWL_STYLE der Schaltfläche Hinzufügen.

2

Um nur auf den KB-Artikel zu wiederholen. Für Option 1 können Sie IDOK in WM_COMMAND einfach handhaben.

case WM_COMMAND: 
    if(wParam == IDOK){ 
    ENTER WAS PRESSED 
    }else{ 
    REGULAR EVENT HANDLING 
    } 

Dies ist ein viel einfacher und sauberer Weg für die Eingabe zu überprüfen.

+0

Vielen Dank! Ich habe versucht, das tagelang zu verfolgen. Zu dem OP können Sie das HWND des Steuerelements überprüfen, wie es in Ihrem Lparam ist. –

Verwandte Themen