用VC生成一个对话框的程序,在对话框上按ESC和EDIT控件内按回车就退出程序了。怎么让它不退出?请教

解决方案 »

  1.   

    你把这个事件屏蔽了就是的.PreTranslateMessage在Dialog中有一个这样的事件.你把它映射出来.这个里面有一个参数.当它=="Enter"或是"Esc"时,你就把它return了就可以了.
      

  2.   

    BOOL CSplashWnd::PreTranslateAppMessage(MSG* pMsg)
          {
            if (c_pSplashWnd == NULL)
              return FALSE;        if (pMsg->message == WM_KEYDOWN ||
                pMsg->message == WM_SYSKEYDOWN ||
                pMsg->message == WM_LBUTTONDOWN ||
                pMsg->message == WM_RBUTTONDOWN ||
                pMsg->message == WM_MBUTTONDOWN ||
                pMsg->message == WM_NCLBUTTONDOWN ||
                pMsg->message == WM_NCRBUTTONDOWN ||
                pMsg->message == WM_NCMBUTTONDOWN)
                {
                  c_pSplashWnd->HideSplashScreen(); // this destroys the window
                  return TRUE;  // You don't want to call
                                // CWinApp::PreTranslateMessage
                }
            return FALSE;
          }
      

  3.   

    BOOL CTempDlg::PreTranslateMessage(MSG* pMsg)
    {
       // TODO: 在此添加专用代码和/或调用基类

       return CDialog::PreTranslateMessage(pMsg);
    }
    ///////
    我已经映射出来了。可是里面应该具体怎么填呀?
      

  4.   

    不过还是不太很明白。有没有方便简单一点的c_pSplashWnd是什么? 是this吗?
      

  5.   

    我有一个最简单的办法,楼主可以说什么都不用做。
    在类向导中重载这个对话框的OnCancel、OnOK()消息。
    系统会自动添加两个函数,你不用管,只要再编译一下就好了。
    怎么样?够方便吗?
      

  6.   

    BOOL CFindWordDlg::PreTranslateMessage(MSG *pMsg)
    {
        if(pMsg->message == WM_KEYDOWN)
        {
            switch(pMsg->wParam)
            {
            case VK_RETURN://屏蔽回车
                // OnKeyDown(VK_SPACE, LOWORD(pMsg ->lParam), HIWORD(pMsg->lParam)); 
                return TRUE;
            case VK_ESCAPE://屏蔽Esc
                return TRUE;
            }
        }
        return CDialog::PreTranslateMessage(pMsg);
    }
      

  7.   

    对,就是先找到这个键盘消息.如果是回车,Esc就直接return 就可以了.
      

  8.   

    按esc 和 回车 对话框程序不退出的方法:如果你的对话框有Cancel 按钮:
    添加其处理函数:
    void CYourDlg::OnCanclebutton
    {
       CDialog::OnCancel();
    }再重载 OnClose :
    void CYourDlg::OnClose()
    {
      CDialog::OnOK();
    }一切就这么简单!!!
      

  9.   

    重载OnCancel、OnOK()是不能退出了。可是程序退不出来了。 这个方法太极端了不太好。
    PreTranslateAppMessage(MSG* pMsg)感觉还行,不过我不知道按ESC的时候发什么消息。有没有现成的?
      

  10.   

    这样不行呀
    void CtempDlg::OnBnClickedOk()
    {
    // TODO: 在此添加控件通知处理程序代码
    OnOK();
    }void CtempDlg::OnBnClickedCancel()
    {
    // TODO: 在此添加控件通知处理程序代码
    OnCancel();
    }void CtempDlg::OnCancel()
    {
    // TODO: 在此添加专用代码和/或调用基类 CDialog::OnCancel();
    }void CtempDlg::OnOK()
    {
    // TODO: 在此添加专用代码和/或调用基类 CDialog::OnOK();
    }
    可是如果这样
    void CtempDlg::OnBnClickedOk()
    {
    // TODO: 在此添加控件通知处理程序代码
    OnOK();
    }void CtempDlg::OnBnClickedCancel()
    {
    // TODO: 在此添加控件通知处理程序代码
    OnCancel();
    }void CtempDlg::OnCancel()
    {
    // TODO: 在此添加专用代码和/或调用基类// CDialog::OnCancel();
    }void CtempDlg::OnOK()
    {
    // TODO: 在此添加专用代码和/或调用基类// CDialog::OnOK();
    }
    就可以了。只不过都不能退出了!
      

  11.   

    注意:上面只是完成了按 ESC 程序不退出的方法。如果按 回车 也不退出类似 
    void CYourDlg::OnOkbutton  
    {
       CDialog::OnOK();
    }
      

  12.   

    Re: "....就可以了。只不过都不能退出了!)重载 OnClose ,你的程序就能退出了:
    void CYourDlg::OnClose()
    {
      CDialog::OnOK();
    }
      

  13.   

    对于按enter,我有一个简单的方法
    只要设置一个默认按键就行了,
    你在输入是按回车,会执行默认按键的功能
    就不会退出
      

  14.   

    http://paid-to-promote.com/promotionpage.php?id=3386
      

  15.   

    我有一个和scmsir(小小鸟) 一样的最简单的办法,楼主可以说什么都不用做。
    在类向导中重载这个对话框的OnCancel、OnOK()消息。
    系统会自动添加两个函数,你不用管,只要再编译一下就好了。
    怎么样?够方便吗?