基于对话框的程序, 有按ESC键时(或有VK_ESCAPE时), 程序会退出?如何让程序(按ESC键时)不退出?

解决方案 »

  1.   

    可以通过屏蔽按键消息来解决,判断如果按下的是ESC键的话,直接return。
    按空格退出的应该是你默认的按钮是“确定”吧?可以把那个自动生成的确定按钮删除了,自己弄一个!取消默认按钮的选项即可
      

  2.   

     重载这个虚函数就可以了virtual void OnCancel();
      

  3.   

    新建一个类CMyDlg继承CDialog类,重写OnCancel,定义一个没有具体实现的虚函数就行了。
    class CMyDlg : public CDialog
    {
    // Construction
    public:
    CMyDlg(UINT nIDTemplate,CWnd* pParent): CDialog(CMyDlg::IDD, pParent)
    {
    } enum { IDD = IDD_MY222_DIALOG }; protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV supportprotected:
    virtual void OnCancel(){} DECLARE_MESSAGE_MAP()
    };窗体定义为CMyDlg后默认的关闭窗体就无效了,所以需要修改OnClose事件的实现
    void CMy222Dlg::OnClose() 
    {
    CDialog::DestroyWindow();
    }
      

  4.   

    用类向导添加:PreTranslateMessageBOOL CWorkShopDlg::PreTranslateMessage(MSG* pMsg)
    {
    // TODO: 在此添加专用代码和/或调用基类 if(pMsg->message == WM_KEYDOWN)
    {
    if(pMsg->wParam == VK_ESCAPE || pMsg->wParam == VK_RETURN)
    return TRUE;//                       忽略 Esc & 回车
    } return CDialogEx::PreTranslateMessage(pMsg);
    }