2009-08-16 51 views
2

不是陷阱VK_RETURN關鍵我子類的編輯框控件像可以子類化編輯框控件

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文檔很好地概述了這種子分類方案。