我添加了一个CDialog1::OnKeyDown事件,想通过键盘上的方向键触发事件,但是按下键盘方向键,却没有触发这个事件,别的键都可以,真是百思不得其解,不知道大家可有高见?

解决方案 »

  1.   

    添加虚函数PreTranslateMessage,在这里判断
      

  2.   


    BOOL EditDlg::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if ( NULL == pMsg )
        {
            return FALSE;
        }
        if ( pMsg->wParam == VK_DOWN )
        {
            .........        
            return TRUE;
        }
        if ( pMsg->wParam == VK_UP )
        {
    .........        
            return TRUE;
        }
        return CDialog::PreTranslateMessage(pMsg);
    }
      

  3.   

    对话框会处理各种控制键(方向键、Tab、Enter、Esc等),不会调用你的响应函数,重载对话框类的PreTranslateMessage函数可以响应。
    BOOL CDialog1::PreTranslateMessage(MSG* pMsg)
    {
    if (pMsg->message == WM_KEYDOWN)
    {
    switch (pMsg->wParam)
    {
    case VK_UP:
    ……
    }
    }
    return CDialog::PreTranslateMessage(pMsg);
    }
      

  4.   


    vs08中的PreTranslateMessage在类属性的重写中哦!