一个窗口内建立几个Edit窗口(CEdit的派生类),我想让按下回车键后让焦点自动移到下一个编缉框,我重载了OnChar,OnKeyDown,OnKeyUp对其进行处理,可是不知为什么,英文输入时按我期望的运行了,但当打开中文输入法时,就不行了!我在一个类中定义了几个Edit变量,并定义了相应的字串变量,当某编辑框失去焦点时,向该类的父窗口发送一个消息通知变量存贮CEdit的文字进相应变量中!高手告诉我这是为什么呀?

解决方案 »

  1.   

    输入法是智能ABC?
    在多按一次回车试试?
      

  2.   

    按下回车键后让焦点自动移到下一个编缉框
    ——通用的方法是这样实现:1,重载PreTranslateMessage,处理回车消息
    BOOL CTestForm::PreTranslateMessage(MSG* pMsg) 
    {
    if(pMsg->message == WM_KEYDOWN) // WM_KEYUP
    if (pMsg->wParam == VK_RETURN)
    {
    OnEnterSetFocus();
    return TRUE;
    }

    return CTestForm::PreTranslateMessage(pMsg);
    }2,实现回车时焦点转移到下一个EDIT控件。
    void CTestForm::OnEnterSetFocus()
    {
    CWnd *pCtrl = CWnd::GetFocus();
    if (pCtrl->m_hWnd == m_hWnd)
    {
    pCtrl = NULL;
    } CWnd *pNext = GetNextDlgTabItem(pCtrl);//要求编缉框的TAB顺序是连续的
    if (pNext != NULL)
    {
    //int nID = pNext->GetDlgCtrlID();
    //TRACE2("This: %d -> Next: %d\n", pCtrl->GetDlgCtrlID(), nID); if(pNext->IsKindOf(RUNTIME_CLASS(CEdit)))
    pNext->SetFocus();
    }
    }
    如果EDIT控件的TAB顺序不是连续的,就稍麻烦一点,用一个循环,直到找到下一个EDIT控件为止.
      

  3.   

    BOOL CTestForm::PreTranslateMessage(MSG* pMsg) 
    {
    if (pMsg->wParam == VK_RETURN)
    {
    GetNextDlgTabItem(GetFocus())->SetFocus();
    return TRUE;
    }

    return CTestForm::PreTranslateMessage(pMsg);
    }