Winapi 捕获移位+;Win32应用程序中的TAB和TAB-only按钮按下

Winapi 捕获移位+;Win32应用程序中的TAB和TAB-only按钮按下,winapi,mfc,Winapi,Mfc,我有一个Win32应用程序,我想在其中捕获键盘上的SHIFT+TAB按钮按下和仅TAB按钮按下。我想在翻译前信息中捕获这两个功能 这将使我能够基于这些键盘按键进行一些自定义操作 现在我的密码是 if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_SHIFT) { m_shiftKey = TRUE; } if (pMsg->message == WM_KEYDOWN

我有一个Win32应用程序,我想在其中捕获键盘上的SHIFT+TAB按钮按下和仅TAB按钮按下。我想在翻译前信息中捕获这两个功能

这将使我能够基于这些键盘按键进行一些自定义操作

现在我的密码是

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组合在这里不能正常工作


有更好的方法吗?

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

解决问题的一个方法是将第一个
if
子句替换为以下代码:

m_shiftKey = ( ::GetKeyState( VK_SHIFT ) < 0 ) ? TRUE : FALSE;
m\u shiftKey=(::GetKeyState(VK\u SHIFT)<0)?真:假;
警告:只有当应用程序未进入模式循环时,才会执行PreTranslateMessage中的代码。无论何时打开模式对话框、移动或调整窗口大小或打开菜单,都会进入模式循环