我建了一个Dialog。每次一点击回车键,Dialog就关闭了。该如何实现标题功能?

解决方案 »

  1.   

    取消按钮的Default Button属性
    或者在Dialog::OnOk()中加入
    CWnd *pWnd = GetFocus();
    if (pWnd->GetDlgCtrlID() != IDOK)
    {
       NextDlgCtrl();
       return;
    }
    CDialog::OnOK();
      

  2.   

    重载view类下的onkeydown消息函数:
    void CmyView::OnkeyDown(UNIT nChar,UNIT nRepCnt,UNIT nFlags)
    {
        if(nChar==VK_ENTER)
        {
           传数据
         }
    }
      

  3.   

    PreTranslateMessage拦截回车键,然后处理数据的传递
      

  4.   

    我是在 文件->新建->MFC AppWizard[exe]的下一步创建一个
    基本对话框。是什么导致点击回车键关闭对话框的。
      

  5.   

    由VC向导生成的MFC对话框有两个按钮,其中ok按钮具有default button属笥。即在对话框中按下回车,系统自动寻找具有default buttonn属性的按钮,并传送这个按钮被点击或按下的消息。而由VC向导生在怕MFC对话框程序中在生成这两个按钮的同时也提供了这两个按钮被按下的消息处理。OK键是update后对话框退出,其对应回车。而Cancel键是直接退出,其对应ESC键。update是对话类的一个方法,作用是更新对话框中绑定的对像变量。
    删除掉这两个按钮后按下回车也还是会退出这是因为,具有default button属性的按钮系统对其消息的处理是并不直接通过这个按钮的。而是另外生成一条消息送进程序消息队列得到执行的。
    因此,如果你不想按下回车就退出。那就得自行处理这个按钮的消息处理。简单一句话,对着这个按钮双击,回车确定。删掉这一句代码 CDialog::OnOK();
      

  6.   

    楼上的方法是正确的,你重载一下OnOk函数,然后删除CDialog::OnOK函数,在你想处理的时候在加上,以后就没有事情了,还有,如果你想将编辑框中的内容传到别的编辑框中,你可以响应编辑框的回车事件,在哪里处理函数就可以了。
      

  7.   

    你可以在PreTranslateMessage处理回车键: 
        BOOL CDlgDlg::PreTranslateMessage(MSG* pMsg) 
        { 
         
         if(pMsg->message == WM_KEYDOWN) 
         { 
         if(pMsg->wParam == VK_RETURN) 
         { 
         UINT nID = GetFocus()->GetDlgCtrlID(); 
         switch( nID) 
         { 
         case IDOK: 
         break; 
         default: 
         NextDlgCtrl(); 
         return TRUE; 
         } 
         } 
         } 
        } 
         
        这里特别处理IDOK是由于Enter键在对话框中默认动作是触发OK按钮。如果你不想这么处理,可以删除有关语句。