我有一个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的组合在这里不能正常使用。
有更好的方法吗?
系统不会为该Shift键生成键盘输入消息。但是,您可以查询Shift键的当前状态,调用GetKeyState。
解决您的问题的一种方法是将您的第一个if
子句替换为以下代码:
m_shiftKey = ( ::GetKeyState( VK_SHIFT ) < 0 ) ? TRUE : FALSE;
提示:PreTranslateMessage
仅当应用程序尚未进入模态循环时,才执行代码输入。每当打开模态对话框,移动窗口或调整窗口大小或打开菜单时,都会进入模态循环。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句