如题!

解决方案 »

  1.   

    用键盘扫描码来判断,如BOOL CYourDlg::PreTranslateMessage(MSG* pMsg) 
    {
    if(pMsg->message == WM_KEYDOWN)
    {
    if((unsigned char)(pMsg->lParam >> 16) == 80)
    {
    AfxMessageBox("小键盘下箭头");
    }
    }
    return CDialog::PreTranslateMessage(pMsg);
    }
    其它键类似处理
      

  2.   

    还请你详细解释一下,80是向下键的asc码吗?其他的是多少?
    主要是这句:if((unsigned char)(pMsg->lParam >> 16) == 80)
    多谢。
      

  3.   

    向上向下键被MFC隐含了,在PreTranslateMessage中可以自己捕捉。键盘各键的键值可以查看MSDN帮助,(索引:VirtualKey).里面键盘上所有键的对应键值都有。unsigned char 可用BYTE代替
      

  4.   

    我找到的怎么不是80啊 ,
    VK_LEFT  25  LEFT ARROW key  
    VK_UP  26  UP ARROW key  
    VK_RIGHT  27  RIGHT ARROW key  
    VK_DOWN  28  DOWN ARROW key  
    是这几个吗?就算是16进制转换一下也不对啊 !试了一下还不行,还请赐教!
      

  5.   

    VK_LEFT 37
    VK_UP 38
    VK_RIGHT 39
    VK_DOWN 40
      

  6.   

    小键盘上的方向键和大键盘上的方向键Virtual-keycode不一样
    小键盘上的向下应该是 VK_NUMPAD2 62 
    另外,WM_KEYDOWN里面的wParam保存的才是按键的Virtual-keycode值。
    至于lParam保存的东西查看了MSDN发现很复杂,唉,英文不好!请高手指教?
    BOOL CTemp2Dlg::PreTranslateMessage(MSG* pMsg) 
    {
    if(pMsg->message == WM_KEYDOWN)
    {
                if((unsigned char)(pMsg->wParam ) == 0x62)
    {
    AfxMessageBox("你按了小键盘上的向下键·");
    }
    }
    return CDialog::PreTranslateMessage(pMsg);
    }