2009-08-16 20 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文档很好地概述了这种子分类方案。