我在建立一个对话框工程后,发现我添加的WM_ONCHAR和WM_KEYDOWN事件,但是我按下键盘的键,并没有触发这两个事件,是不是对话框不支持,帮忙解答一下,如果不行的话,该怎样才能实现?

解决方案 »

  1.   

    是对话框不支持,自己写代码处理
    CDialog::PreTranslateMessage(MSG* pMsg)
    {
        if(pMsg->message==VK_KEYDOWN)
        {
            switch(pMsg->wParam)
            {
               case: 'VK_LEFT'
                 MessageBox("你按了左方向键");
               case: 'VK_RETURN'
                 MessageBox("你按了回车键");
                 ...//你的处理代码
               ...
            }
         }
         .....
        return CDialog::PreTranslateMessage(pMsg);
    }
      

  2.   

    需要改写PreTranslateMessage函数,此为CDialog的虚拟函数
    BOOL yourDlg::PreTranslateMessage(MSG* pMsg) 
    {
       switch (pMsg->message)
       {  case WM_KEYDOWN:
         switch (pMsg->wParam)
         {
          case VK_ESCAPE:
         ...
         }   }     
       return CDialog::PreTranslateMessage(pMsg);
    }