2009-08-16 11 views
2

のためではないトラップVK_RETURNキー私は、このサブクラスプロシージャが呼び出されますエディットボックスのchar入力して今すぐは、サブクラス化エディットボックスコントロール

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); 

} 

のようなエディットボックスコントロールをサブクラス化することができます。しかし、私はキーを押したときにそれを得ることができません。

上記の手順は間違っていますか?

答えて

6

いいえ、システムはWM_GETDLGCODEを使用して、コントロールが関心のあるキーのプレスを決定します。デフォルトでは、エディットボックスはリターンを処理しません(ダイアログプロシージャはデフォルトボタンを押すと解釈します)。 VK_RETURNSが送信されます。 WM_GETDLGCODEメッセージを処理してDLGC_WANTALLKEYSを返し、VK_RETURNSを取得する必要があります。

MSのドキュメントでは、このサブクラス分類のシナリオを概説しています。

関連する問題