处理键盘组合键消息

    技术2025-03-29  10

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

     

    最新回复(0)