基于对话框的程序,一按ESC就退出,请问怎么处理才能不退出,重载ONCHAR、KEYDOWN等消息没用

解决方案 »

  1.   

    重载PreTranslateMessage函数,处理Esc消息。
      

  2.   

    重载 OnCancel()函数!
    基于对话框的程序,当用户按下Esc后,会调用OnCancel()函数
    重载后,不调用 CDialog::OnCancel()就可以了
      

  3.   

    最好是重载PreTranslateMessage函数,处理Esc消息,而不是重载 OnCancel()函数
    因为重载 OnCancel()函数和重载PreTranslateMessage函数是有区别的。
    以下是最明显的区别:
    关闭对话框的叉,响应的也是OnCancel,如果重载OnCancel,那么按叉也关闭不掉了。
    而在PreTranslateMessage函数,处理Esc消息。则只是对Esc起作用。
    以下是方法:
    BOOL CXXXX::PreTranslateMessage(MSG* pMsg) 
    {
        // TODO: Add your specialized code here and/or call the base class
        if(pMsg->message == WM_KEYDOWN)
        {
            int keyvalue = pMsg->wParam;
            if(keyvalue==VK_ESCAPE)
            {
                 return 1;
            }
        }
        return CYYYY::PreTranslateMessage(pMsg);
    }
      

  4.   

    你的对话框类中有一个OnCancel函数。
    在可视化资源编辑环境下,双击“取消”按纽,进入OnCancel()函数,将MFC自动生成的代码
    全删掉,如下!
    void CXXXDlg::OnCancel()
    {}
      

  5.   

    难道大家没遇到过这个问题吗
    是人都碰过
    该死的MFC,想到这个问题我都要骂人
      

  6.   

    楼上的,切忌心浮气躁呀!
    这个问题的解决方案实在太多了:OnSysCommand OnCancel PretranslateMessage WindProc 等等地方都可以解决。
    另外,这可不关MFC太多问题呀,呵呵!
      

  7.   

    把OnCancel()函数里面的内容清掉就可以了!
      

  8.   

    case WM_KEYDOWN: // Is A Key Being Held Down?
    {
    if[wParam] == VK_ESCAPE
                                PostQuitMessage(0); // If So, Mark It As TRUE
    return 0; // Jump Back
    }
      

  9.   

    重载OnCancel()至于按关闭按钮不能光比对话框可以这么解决,重载OnClose()
    调用 CDialog::OnCancel()
      

  10.   

    flashzf() ( ) 正确。