鄙人刚学ATL,创建了一个基于Edit的控件,想过滤一些消息,确找不到应该在何处过滤,请高人指点下啊,感激不尽。

解决方案 »

  1.   

    BEGIN_MSG_MAP(CYourClass)   
        
      ALT_MSG_MAP(1)   
      MESSAGE_HANDLER(
    WM_GETDLGCODE,   OnGetDlgCode)   
      MESSAGE_HANDLER(WM_KEYDOWN,   onkeydown)   
      MESSAGE_HANDLER(
    WM_CHAR,   OnEditInputMagnification)   
        
      END_MSG_MAP()   
        
        
      .cpp     
      in   constructor:   CYourClass::CYourClass()   :   m_Edit(_T("EDIT"),   this,   1)   {}   
      in   OnInitDialog:   m_Edit.SubclassWindow(::GetWindow(GetDlgItem(IDC_COMBO),   GW_CHILD));   
        
      add   if   you   want   all   keys   add   following:   
        
      LRESULT   CYourClass::OnGetDlgCode(UINT   uMsg,   WPARAM   wParam,   LPARAM   lParam,   BOOL&   bHandled)   
      {   
      return   DLGC_WANTALLKEYS;   
      }   
        
        
      and   finally   you   can   get   KeyDown:   
        
      LRESULT   CYourClass::onkeydown(UINT   uMsg,   WPARAM   wParam,   LPARAM   lParam,   BOOL&   bHandled)   
      {   
      switch   (wParam)   
      {   
      case   VK_RETURN:   
      {   
      ...   
      }   
      break;   
      case   VK_TAB:   
      {   
      ...   
      }   
      break;   
      }   
        
      bHandled   =   FALSE;   
      return   S_OK;   
      }