void CMyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
      if(!::IsCharAlpha ((TCHAR)nChar)||nChar==VK_RETURN)  //如果击键不是字母,或者是回车
      {
if(nChar==VK_RETURN)
{
              //do something!         
        }
     CEdit::OnChar(nChar, nRepCnt, nFlags);
      }
}上面的程序是从我写过的程序中拿出来的,很好用的,你可以试一下!

解决方案 »

  1.   

    好像不行吧如果你的程序结构是
    DOC/VIEW时
    重载MAINFRAME类的PRETRANSLATEMESSAGE函数是dialog时
    重载dialog类的PRETRANSLATEMESSAGE函数重载部分代码
    :if(pMsg->message==WM_SYSKEYDOWN)
       if(pMsg->wParam&VK_RETURN)    Sendmessage(你的事件);
    return TRUE;
      

  2.   

    你到底在问什么呀,大哥,你不是说在Edit::OnChar()里怎么不能处理VK_RETURN键?只要你从CEdit继承一个CMyEdit,然后在CMyEdit类中写我上面贴出的代码,怎么会不可以,真不知道你要做什么
      

  3.   

    补充一下,我的程序是基于对话框的,我从CEdit派生CMyEdit类
    在MyEdit::OnChar()里怎么不能处理VK_RETURN键?反正按回车
    没有反应,代码如下:void CMyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
    {
      if (nChar == VK_RETURN )
        {
    MessageBox (strTemp);
    strTemp.Delete (0,8);
    CEdit::OnChar (nChar, nRepCnt, nFlags);
        }
    }
      

  4.   


    classwizard里重载dialog类的pretranslatemessage函数重载部分代码加入
    if(pMsg->message==WM_SYSKEYDOWN)
       if(pMsg->wParam&VK_RETURN)    MessageBox ("ok?"); return TRUE;
      

  5.   

    同意楼上,重载Pretranslatemessage函数。
    if(pMsg->wParam==VK_RETURN)
        MessageBox ("ok?");
        return TRUE;
      

  6.   

    ::TranslateMessage将与字符键有关的击键消息转换成WM_CHAR消息,
    MFC会自动调用::TranslateMessage消息,你从CEdit派生出CMyEdit类
    需要自己调用::TranslateMessage消息将击键消息转换为WM_CHAR消息,
    可以在classwizard里重载dialog类的pretranslatemessage函数处理。
      

  7.   

    再补充一下,可以处理vk_back,不能处理vk_return
      

  8.   

    收到你的短信,我继续上面我所说的:
    如果你的程序是一个对话框程序,你需要在OnInitDialog()中子类化一个编辑框类,这样操作后才可以把自定义的编辑框和普通编辑框同样对待,否则是不会调用你的那个CMyEdit::OnChar()的。假设你的编辑ID为IDC_EDIT,在OnInitDialog()中:
    m_myedit.SubclassDlgItem (IDC_EDIT,this); 这样应该可以了