在Win32 App中按下SHIFT + TAB和TAB按钮

时间:2015-07-27 15:53:07

标签: winapi mfc

我有一个Win32应用程序,我想要在键盘上按下SHIFT + TAB按钮,按TAB键盘按键。我想在 PreTranslateMessage 功能中捕获这两个。

这将使我能够根据这些键盘按键进行一些自定义操作。

现在我的代码是,

if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_SHIFT)
    {
        m_shiftKey = TRUE;
    }

    if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_TAB)
    {
        // DO Something
        m_shiftKey = FALSE;
        return TRUE;
    }

    if (pMsg->message == WM_KEYDOWN && m_shiftKey && pMsg->wParam == VK_TAB) 
    {
        // DO Something
        return TRUE;
    }

我可以在这里按下TAB键,但是SHIFT + TAB的组合在这里不能正常工作。

有更好的方法吗?

1 个答案:

答案 0 :(得分:3)

系统不会为 Shift 键生成键盘输入消息。但是,您可以查询 Shift 键的当前状态调用GetKeyState

您的问题的一个解决方案是使用以下代码替换您的第一个if子句:

m_shiftKey = ( ::GetKeyState( VK_SHIFT ) < 0 ) ? TRUE : FALSE;

警告:如果应用程序未进入模态循环,则仅执行PreTranslateMessage中的代码。只要打开模式对话框,移动或调整窗口大小或打开菜单,就会进入模态循环。