用MFC AppWizard制作的基于对话框的程序,按Escape键会自动关闭对话框。当把所有控件都删除后,按回车键也会关闭对话框,请问如何取消按这两个键关闭对话框的功能?

解决方案 »

  1.   

    重载OnOK,OnCancel,置函数内容为空
      

  2.   

    PreTranslateMessage(MSG *pMsg)
    {
    if(pMsg->message == WM_KEYDOWN && (pMsg->wParam == VK_ENTER || pMsg->wParam == VK_ESCAPE))
    return TRUE;
    return Cxx::PreTranslateMessage(pMsg);
    }
      

  3.   

    flyelf(空谷清音) :你这样做会导致程序对Enter和Escape失去响应。
      

  4.   

    if( && pMsg->message == WM_KEYDOWN  (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE)&&pMsg->hwnd ==::GetDlgItem(this->m_hWnd,IDOK))
      

  5.   

    重载OnOK置空看起来还可以,但重载OnCancel置空会导致右上角的关闭按钮失效,因为
    关闭按钮的响应函数OnClose会调用OnCancel.
    楼上的方法试过吗?好象所有的方法都治标不治本啊,MFC在什么地方调用的OnCancel和OnOK呢?
      

  6.   

    重载OnOk()和OnClose()
    不是OnCancel().还有就是可以把对话框上的每个控件属性中的Tab Stop前的勾全部去掉,
    这样也能起到效果
      

  7.   

    重载OnOk()和OnClose(),OnCancel().
    在OnClose()中DestroyWindow()
      

  8.   

    重载对话框的PreTranslateMessage()函数,在函数中进行如下处理
    BOOL CMyDlg::PreTranslateMessage(MSG* pMsg) 
    {
    if(pMsg->message==WM_KEYDOWN)
    {
    switch(pMsg->wParam){
    case 0x0d://回车键
    return false;
    case VK_ESCAPE://esc键
    return false;
    }
    }

    return CDialog::PreTranslateMessage(pMsg);
    }
    这样当你按ESC键和ENTER键的时候对话框就不会关闭了!
    希望对你有所帮助!
      

  9.   

    1、重载OnOk()和OnClose(),OnCancel().
    在OnClose()中DestroyWindow()
    2、重载对话框的PreTranslateMessage()函数,在函数中进行如下处理
    BOOL CMyDlg::PreTranslateMessage(MSG* pMsg) 
    {
    if(pMsg->message==WM_KEYDOWN)
    {
    switch(pMsg->wParam){
    case 0x0d://回车键
    return false;
    case VK_ESCAPE://esc键
    return false;
    }
    }

    return CDialog::PreTranslateMessage(pMsg);
    }明显都可以,大家不要争吗,分一下就可以了。
      

  10.   

    在这个里PreTranslateMessage(MSG *pMsg)
    加入
    if(pMsg->message == WM_KEYDOWN && (pMsg->wParam == VK_ENTER || pMsg->wParam == VK_ESCAPE))
      

  11.   

    重载对话框的ONOK和ONCANCEL函数,让这两个函数什么都不做就OK了。如果你在自己的某个按钮执行确认(ENTER)或取消操作(ESC),只要在该按钮的执行代码中调用CDIALOG的函数:OnOK和OnCancel就可以。
      

  12.   

    OnOK,OnCancel事件里
    在return就ok。
      

  13.   

    很简单只需要在对话框的onchar函数中:
    把截获到的Enter(13),ESC(27)
    if(nChar == 13 || nChar == 27)
      return;
    就ok了
      

  14.   

    void CYDlg::OnCancel() 
    {
    // TODO: Add extra cleanup here

    // CDialog::OnCancel();
    }void CYDlg::OnOK() 
    {
    // TODO: Add extra validation here

    // CDialog::OnOK();
    }
      

  15.   

    agree ,最好用 PreTranslateMessage 处理按键
      

  16.   

    agree to override PreTranslateMessage