我自己继承CDialog class CMainForm : public CDialog
...
H文件:
virtual void OnKeyUp(UINT nchar,UINT nRepCnt,UINT nFlags);CPP文件:
void   CMainForm::OnKeyUp(UINT nchar,UINT nRepCnt,UINT nFlags)
{   
   MessageBox(L"ff",0,0);
}
然后CMainForm* pMainForm = new CMainForm();
pMainForm->Create(IDD_MAINFORM, theApp.m_pMainWnd);
pMainForm->ShowWindow(SW_SHOW);
随便按键盘 问什么不能弹出提示框呢?有什么需要注意的地方呢?

解决方案 »

  1.   

    只要对话框上有子窗口就没机会响应到此消息。
    在PreTranslateMessage中过滤此消息。
      

  2.   

    BOOL CMainForm::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if( pMsg->message>=WM_KEYDOWN && pMsg->message<=WM_KEYUP)
    {
    this->SendMessage(pMsg->message,pMsg->wParam,pMsg->lParam);
    return TRUE;
    }
        else
            return CDialog::PreTranslateMessage(pMsg);
    }
    加这个就可以了``
      

  3.   

    void CMainForm::OnKeyUp(UINT nchar,UINT nRepCnt,UINT nFlags)
    {
          //加这句试试
          CDialog::OnKeyUp(UINT nchar,UINT nRepCnt,UINT nFlags);
          MessageBox(L"ff",0,0);
    }
      

  4.   

    只要对话框上有子窗口就没机会响应到此消息。
    在PreTranslateMessage中过滤此消息,如下 :
    BOOL CMainForm::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if( pMsg->message>=WM_KEYDOWN && pMsg->message<=WM_KEYUP)
    {
    this->SendMessage(pMsg->message,pMsg->wParam,pMsg->lParam);
    return TRUE;
    }
        else
            return CDialog::PreTranslateMessage(pMsg);
    }
    ===============================
      

  5.   

    对话框的输入焦点一般落在子控件上,所以只能在消息分发到子控件之前进行拦截.
    如楼上所说,重写PreTranslateMessage即可
      

  6.   

    我这样写根本没有任何反应的
    BOOL   CMainForm::PreTranslateMessage(MSG*   pMsg)     
    {
    MessageBox(L"ff",0,0); 

    return  CDialog::PreTranslateMessage(pMsg);
    }我的对话框 是这样出来的pMainForm->ShowWindow(SW_SHOW); 不是Domodal为什么没有消息循环
      

  7.   

    不对话框是非模式对话框,所以它无自己的消息循环。
    如果lz
    BOOL   CMainForm::PreTranslateMessage(MSG*   pMsg)     
    {
    MessageBox(L"ff",0,0); 

    return  CDialog::PreTranslateMessage(pMsg);
    }
    没有反应那么请你重载
     CXXApp的的PreTranslateMessage虚函数
    BOOL   CXXApp::PreTranslateMessage(MSG*   pMsg)     
    {
      if ( ( 你的对话框->PreTranslateMessage( pMsg ) )
      {
        return true;
       };
      return CWinApp::PreTranslateMessage( pMsg );};
      
      

  8.   

    CXXApp是什么东西 怎么重载 ?说的详细一点 谢谢
      

  9.   

    CXXApp是什么东西 怎么重载 ?说的详细一点 谢谢hehe ..你是VC自动生成的吗??不是的话.
    创建对话框的代码是在哪里出现的.是main()??
    能说下,你这个程序主要几个步骤吗?如果是VC自动生成的话,点类视图就可以看APP类了,然后右键添加 虚Virtual Virtual函数,
    选择里面的PreTranslateMessage就可以了.
      

  10.   

    LZ?
    程序没什么保密性吧.   我想看看代码..
    QQ 32242132  ..
    邮箱[email protected]