我想实现这样一个功能:
   建立一个CEdit的派生类myEdit
   在状态栏中创建一个myEdit,回车时能够做出响应 现在:
   建立的派生类中如何检测回车,我已经试过了OnChar,OnKeyDown了 不好使
   我把期望做出响应回车的函数写在了CMainFrame中
   在myEdit中定义了#define message WM_USER+10
   期望在myEdit中检测到回车时就SendMessage(message)上述思路可行么?我却没有做出来。
请明白人赐教。

解决方案 »

  1.   

    用PreTranslateMessage 吧
    BOOL CMyEdit::PreTranslateMessage(MSG *pMsg)
    {
        if (pMsg->message==WM_KEYDOWN && (pMsg->wParam==VK_RETURN))
    {
           ParseLine(pMsg);// }
    }
    void CMyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
    {
            if(m_CommandEdit)//m_CommandEdit是一个CEdit
    {
    m_CommandEdit.OnChar(nChar,nRepCnt,nFlags);
    m_CommandEdit.SetFocus();

    return;
    }
    }
    你可以在View中重载OnChar函数,捕获按键消息,再调用你的Edit类中的OnChar,
    PreTranslateMessage  函数处理按键消息。(^_^,写得有点乱,不好意思)
    void CMyView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
    {
    CMyEdit*pEdit=(CMyEdit*)AfxGetApp()->m_pMainWnd->GetDescendantWindow(ID_VIEW_MYEDIT);
      
          if(pEdit)
      {
        pEdit->OnChar(nChar, nRepCnt, nFlags);
                

    return;
      }
    }
      

  2.   

    我记得一种做法是在CMainFrame的PreTranslateMessage中处理,like this:if((pMsg->message >= WM_KEYFIRST) && (pMsg->message <= WM_KEYLAST)) 
    {
        if(pMsg->wParam == VK_RETURN)
       {
    CWnd* pWnd = GetFocus();
    if(pWnd != NULL)
             {
       if(pWnd->GetDlgCtrlID() == 编辑框id)
    PostMessage();
              }
        }
    }return CFrameWnd::PreTranslateMessage(pMsg);
      

  3.   

    创建EDIT时,加上ES_WANTRETURN属性,然后响应OnKeyDown()判断回车。