一对话框,我需要捕获其中的OnKeyUp,如果对话框上什么控件都没有的话,这是没有问题的但是如果对话框上有控件,对话框就有可能收不到OnKeyUp,网上找了一下,好象vb里面有个叫KeyPreview的属性,但是vc没有这东西,不知道怎么办?

解决方案 »

  1.   

    在对话框的PreTranslateMessage中处理键盘消息。
      

  2.   

    BOOL CT3Dlg::PreTranslateMessage(MSG* pMsg) 
       {       if(pMsg->message == WM_KEYUP)    
          {
               //按键值放在pMsg->wParam中,以下以检测用户是否按下Tab键为例
               //把光标移到下面一行的"VK_TAB"处,按下F12键就可以知道其它键的值了
               if(pMsg->wParam == VK_TAB)
                         AfxMessageBox("你按下了Tab键");
           }
           return CDialog::PreTranslateMessage(pMsg);
       }
      

  3.   

    忘了说了,添加对话框的PreTranslateMessage处理函数的方法是:
      在你的工程中按Ctrl+W键,在MFC ClassWizard中Object IDs栏中选择C****Dlg(****为你的工程名),然后再右侧的Messages中找到PreTranslateMessage项,双击它,再在下面的Member functions中再次双击PreTranslateMessage项,接下来就可以按上面的代码自己处理PreTranslateMessage函数了。
      

  4.   

    在PreTranslateMessage中捕获WM_KEYUP消息即可
      

  5.   

    那就把WM_KEYUP换成WM_KEYDOWN就行了:
    BOOL CDddDlg::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if(pMsg->message == WM_KEYDOWN)
    {
    if(pMsg->wParam == VK_TAB)
    {
    //在这里加上你的处理代码
    }
    } return CDialog::PreTranslateMessage(pMsg);
    }