在处理组合键消息时,不能直接用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);
}