2009-08-16 11 views
2

I subclassed ein Bearbeitungsfeld Kontrolle wiekann nicht Falle VK_RETURN Schlüssel für subclassed editbox Steuerung

lpfnOldWndProc = (FARPROC)SetWindowLong(hEdit,GWL_WNDPROC, (DWORD)SubClassFunc); 




LRESULT FAR PASCAL SubClassFunc( HWND hWnd, 
           UINT Message, 
           WPARAM wParam, 
           LPARAM lParam) 
{ 

    switch(Message) 
    { 

    case WM_CHAR: 
     //Process this message to avoid message beeps. 
     if ((wParam == VK_RETURN) || (wParam == VK_TAB)) 
     { 
      //Do Something 
      return 0; 
     } 

     break; 
    case WM_KEYDOWN: 
     if ((wParam == VK_RETURN) || (wParam == VK_TAB)) { 
      //Do Something 
      return 0; 
     } 

     break ; 

    default: 
     break; 
    } 

    return CallWindowProc((WNDPROC)lpfnOldWndProc, hWnd, Message, wParam, lParam); 

} 

Nun, wenn ich in editbox diese Unterklasse Prozedur char eingeben wird aufgerufen. Aber ich kann es nicht bekommen, wenn die Eingabetaste gedrückt wird.

Ist das etwas falsch in der obigen Prozedur.

Antwort

6

Nein, das System verwendet WM_GETDLGCODE, um zu ermitteln, an welcher Taste das Steuerelement interessiert ist. Standardmäßig bearbeitet ein Eingabefeld nicht die Rückgabe (die Dialogprozedur interpretiert es als das Drücken der Standardschaltfläche) und erfordert dies daher nicht VK_RETURNS werden zu ihm gesendet. Sie müssen die WM_GETDLGCODE Nachricht verarbeiten und DLGC_WANTALLKEYS zurückgeben, dann sollten Sie Ihre VK_RETURNS erhalten.

Die MS-Dokumentation skizziert dieses Sub-Classing-Szenario ziemlich gut.