2009-08-16 6 views
2
editbox sous-classé

I sous-classé un contrôle de zone d'édition commene peut pas piéger VK_RETURN clé pour le contrôle

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

} 

Maintenant, quand je rentre ombles dans editbox cette procédure est appelée sous-classé. Mais je ne suis pas capable de l'obtenir quand on appuie sur la touche entrée.

Est-ce que quelque chose ne va pas dans la procédure ci-dessus.

Répondre

6

Non, le système utilise WM_GETDLGCODE pour déterminer la touche qui intéresse le contrôle. Par défaut, une boîte d'édition ne traite pas Return (la procédure de dialogue l'interprète comme appuyant sur le bouton par défaut) et ne nécessite donc pas VK_RETURNS lui sont envoyés. Vous devez traiter le message WM_GETDLGCODE et retourner DLGC_WANTALLKEYS, alors vous devriez obtenir votre VK_RETURNS.

La documentation MS décrit assez bien ce scénario de sous-classement.

Questions connexes