重载函数PreTranslateMessage(),在其中处理Escape键

解决方案 »

  1.   

    重载OnCancel(), return FALSE;
      

  2.   

    中载OnCancel()不行!Dialog的关闭(就是右上角的小叉)式Dialog生成是默认的快捷键Escape!
    TigerHu: Key Hook是什么意思?能具体说一下吗?谢谢大家了!
      

  3.   

    PreTranslateMessage(...) {
    if(pMsg->message == WM_KEYDOWN) {
    switch(pMsg->wParam) {
    case VK_ESCPAE:
    return TRUE;
    }
      

  4.   

    BOOL CXXXXX::PreTranslateMessage(MSG* pMsg) 
    {
    switch(pMsg->message)
    {
    case WM_KEYUP:
    switch(pMsg->wParam)
    {
    //处理Escape键的消息
    case VK_ESCAPE:
    return FALSE;
    default:
    break;
    }
    break;
    default:
    break;
    }

    return CDialog::PreTranslateMessage(pMsg);
    }
      

  5.   

    OnCancel()是void类型,不需要返回值,总不能不让他返回到 CDialog::OnCancel();吧?
      

  6.   

    呵呵,慢了57秒,不过我处理的是KeyUp :)
      

  7.   

    在PreTranslateMessage中if( WM_KEYDOWN == pMsg->message)
      if( VK_ESCAPE == pMsg->wParam )
          return TRUE;
    ...
    ...已经测试,可以解决你的问题
      

  8.   

    mefish: 不能再Dialog类中重载吧!应该在App中吗?在Dialog中不响应啊!
      

  9.   

    不是在App中,在你的自己的那个从CDialog继承的dialog类里。比如说
    class CStartInfo : public CDialog
    {
    ...
    // Implementation
    protected: // Generated message map functions
    //{{AFX_MSG(CStartInfo)
    virtual void OnCancel();
    virtual void OnOK();
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
    };
      

  10.   

    然后在你的Cpp文件中的
    void CStartInfo::OnCancel()
    {
        //do nothing
    }还有一个比较简单的方法就是在你的对话框里放置一个ID为IDCANCEL的按钮,将其属性设置为
    disabled,并去掉其可见属性,就能达到目的。