请教!一个最简单的MFC的对话框,上面有两个EDIT框,在第一个框中编辑时,希望按下回车键时焦点移到下面一个EDIT框,但是事实上是整个对话框会关闭,而且即使对话框中什么控件也没有的时候,按下回车就会关闭,是怎么回事?怎样才能使按下回车键而不关闭对话框呢?

解决方案 »

  1.   

    映射OnOK()消息和OnCancel()消息,将里面的语句清空即就实现按下回车键不关闭对话框了。
      

  2.   

    /*----------------------------------------------------------*/
    /* 加入两个哑函数OnOK和OnCancel */
    /*----------------------------------------------------------*/void CDlg::OnOK()
    {
    }void CDlg::OnCancel()
    {
    }
      

  3.   

    如果希望希望按下回车键时焦点移到下面一个EDIT框而对话框不关闭,需要映射PreTranslateMessage(MSG* pMsg)函数并作处理,如下:
    BOOL Cprint::PreTranslateMessage(MSG* pMsg) 
    {
        // TODO: Add your specialized code here and/or call the base class
     if(pMsg->message == WM_KEYDOWN )
     {
     CWnd * m_pwnd = CWnd::GetFocus(); 
     int  nID = m_pwnd->GetDlgCtrlID();
    switch (pMsg->wParam)
    {  
    case VK_RETURN :
    if ( nID != IDOK && nID != IDCANCEL )
    pMsg->wParam = VK_TAB;  
    break; case VK_DOWN  :
    pMsg->wParam = VK_TAB;
    break;

    case VK_UP  :
    GetNextDlgTabItem(m_pwnd,TRUE)->SetFocus() ;
    break;
    }
     }

    return CDialog::PreTranslateMessage(pMsg);
    }
      

  4.   

    或者在PreTranslateMessage里面判断键盘消息
    switch(msg.message)
    {
    case WM_KEYDOWN:
      switch(msg.wParam):
      {
      case VK_RETURN:
      case VK_ESCAPE:
        return;
      }
    }
      

  5.   

    在类视图,右键点击edit框所在的类->添加虚函数->PreTranslateMessage:BOOL CMMTESTDlg::PreTranslateMessage(MSG* pMsg) 
    {
    if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)
    return NULL;

    return CDialog::PreTranslateMessage(pMsg);
    }