我用Class Wizard建立了一个CDialog
然后添加ON_WM_CHAR,什么也不做就在里面加入断点,可是我在调试的时候,无论我按什么键,就是不跑到OnChar()里面去,这是为什么,如何才能使的CDialog响应ON_WM_CHAR消息?谢谢!

解决方案 »

  1.   


    里面的代码是这样的:
    void CMyDialog::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
    {

    CDialog::OnChar(nChar, nRepCnt, nFlags);//加断点处
    }希望大家试了之后来回答我的问题,不要任意猜测,谢谢!
      

  2.   

    BOOL CDialog1::PreTranslateMessage(MSG* pMsg) 
    {
    if(pMsg->message==WM_CHAR)

    //if(pMsg->hwnd==this->GetDlgItem(IDC_EDIT1)->m_hWnd)
    //{
    //(UINT)pMsg->wParam  //这个是按钮的VK code
    //}
    }
    return CPropertyPage::PreTranslateMessage(pMsg);
    }
      

  3.   

    BOOL CDialog1::PreTranslateMessage(MSG* pMsg) 
    {
    if(pMsg->message==WM_CHAR)

    //if(pMsg->hwnd==this->GetDlgItem(IDC_EDIT1)->m_hWnd)
    //{
    //(UINT)pMsg->wParam  //这个是按钮的VK code
    //}
    }
    return CPropertyPage::PreTranslateMessage(pMsg);
    }
      

  4.   

    如果一定要用OnChar
    可以先看看OnKeyUp事件有没有反应
      

  5.   

    OnChar事件好像是对CDialog屏蔽的,只有(单文档和多文档,就是可输入文本的控件和窗体)才响应。如果在CDialog中处理OnChar事件,只能用PreTranslateMessage 了
      

  6.   

    dialog的WM_KEYDOWN
    WM_CHAR 消息好像都不能够接受  所以处理PreTranslateMessage才可以
      

  7.   

    CDialog类没有OnChar()这个成员函数
      

  8.   

    那如果我要在这个对话框中按下a键时弹出MessageBox("Error!"),在PreTranslateMessage(MSG *pMsg)的代码如何实现?