我用MFC编程,
所有对话框都是一按下回车键就会关闭,即使焦点在单行文本框时也不例外.

解决方案 »

  1.   

    OnOk()
    {
    //CDialog::OnOk;
    return;
    }
      

  2.   

    右击按钮,属性->style里,有一个“Default button”项,去掉该选项
      

  3.   

    因为回车响应onok(),ESC响应ONCANCEL()你可以重载他们,或者重载pretranslate()
      

  4.   

    重载OnOK
    void CMyDlg::OnOK()
    {
    }
      

  5.   

    楼主:楼上的怎会来晚呢?
    他们都不能很好解决问题.如果重载以下函数:
    // 1
    OnOk(){
    //CDialog::OnOk;
    return;
    }
    // 2
    OnCancel(){
    //CDialog::OnOk;
    return;
    }程序将不能关闭!PreTranslateMessage( MSG* pMsg );
    谁来介绍一下这个函数.
    我想处理"回车键"和"Esc"键.
      

  6.   

    最简单的方法还是重载onok()和oncancel(),然后处理
    void CSIMTOOLDlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
    switch(nID)
    {
    case SC_MINIMIZE:
    ShowWindow(SW_HIDE);
    break;
    case 61536:  // 关闭窗口
    if (MessageBox("确定要退出此软件?", "AWS",MB_YESNO|MB_ICONQUESTION) == IDNO)
    {
    return;
    }
    CDialog::OnOK();
    break;
    default:
    CDialog::OnSysCommand(nID, lParam);
    break;
    }
    }
      

  7.   

    PreTranslateMessage( MSG* pMsg );
    也是可以的,在MSDN重于对应的键盘事件的参数
      

  8.   

    按下回车会触发对话框的默认函数ON_OK
    所以会关闭对话框
    只需要重载该函数
    什么都不做就可以了
    esc键也用此方法屏蔽
      

  9.   

    重载OnKeyDown消息,当回车按下时不调用基类的OnKeyDown过程就可以了。
      

  10.   

    另一种方法:
    重载OnOk(),OnCancel(),OnExit()
    void CMyDlg::OnOK()
    {
    }
    void CMyDlg::OnCancel()
    {
    }
    void CMyDlg::OnExit()
    {
       CDialog::OnOk();
    }
      

  11.   

    另一种方法:
    重载OnOk(),OnCancel(),OnExit()
    void CMyDlg::OnOK()
    {
    }
    void CMyDlg::OnCancel()
    {
    }
    void CMyDlg::OnClose()
    {
       CDialog::OnOk();
    }不好意思,写错了:)
      

  12.   

    楼主:
    PreTranslateMessage( MSG* pMsg );
    谁来介绍一下这个函数的用法.
    我想处理"回车键"和"Esc"键.