处理键盘组合键消息

在处理组合键消息时,不能直接用wParam, 而要用GetKeyState(VK_CONTROL)或GetKeyState(VK_SHIFT)来判断是否按下了组合键...

你这样用:
if( GetKeyState(VK_CONTROL) & 0xF0000000) nCtrlAKeyDown = TRUE;
if( GetKeyState(VK_SHIFT) & 0xF0000000) nShiftKeyDown = TRUE;

//========================================
// 示例程序
BOOL CAAADlg::PreTranslateMessage(MSG* pMsg)
{
   
if(pMsg->message==WM_KEYDOWN){
TRACE("/n/n/t/t-> 按键:wParam=%lX (%c)",pMsg->wParam,pMsg->wParam);
if(pMsg->wParam==VK_ESCAPE || pMsg->wParam==VK_F1){
   return TRUE;   // 取消ESC与F1功能键
}
else if(pMsg->wParam==VK_RETURN || pMsg->wParam==VK_DOWN){
   pMsg->wParam=VK_TAB; // 映射DOWN与Return到TAB键
}
else if(pMsg->wParam==VK_UP){
   keybd_event(VK_SHIFT,0,0,0); // 模拟映射UP到SHIFT+TAB组合键
   keybd_event(VK_TAB,0,0,0);  
   keybd_event(VK_SHIFT,0,2,0);  
   keybd_event(VK_TAB,0,2,0);  
}
else{
   if( ( GetKeyState(VK_CONTROL) & 0xF0000000) &&
    ( GetKeyState(VK_SHIFT) & 0xF0000000) &&
    ( pMsg->wParam=='A' || pMsg->wParam=='a') )
   {
    TRACE("/n你按下了 CTRL+SHIFT+A ...");
   }
   else if( ( GetKeyState(VK_CONTROL) & 0xF0000000) &&
    ( pMsg->wParam=='A' || pMsg->wParam=='a') )
   {
     TRACE("/n你按下了 CTRL+A ...");
   }
   else if( ( GetKeyState(VK_SHIFT) & 0xF0000000) &&
    ( pMsg->wParam=='A' || pMsg->wParam=='a') )
   {
    TRACE("/n你按下了 SHIFT+A ...");
   }
   else
   {
    // 按了其它键...
   }
}
}
return CDialog::PreTranslateMessage(pMsg);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值