通过TranslateAccelerator检测快捷方式时,忽略Shift键的状态
Ignoring the status of Shift key when detecting shortcuts via TranslateAccelerator
我被卡住了:如何防止在加速器翻译过程中考虑虚拟移位键?例如,如果我的加速器表包含 ctrl a 的单个条目(要选择当前集中的窗口中的所有内容,请说(,那么我希望检测到相应的命令当 ctrl a 被按下以及 ctrl shift a a 被按下(但相反,我仍然想要 alt 键才能扮演其角色,因此 ctrl shift> shift a a shound不会翻译为我的命令(。
这篇文章无济于事。我认为我仍在消息循环时正在调用TranslateAccelerator
功能(请参见下面的代码,如果我错了,请纠正我(。
当我看到WM_KEYDOWN
消息时,我尝试通过获得当前键盘状态来超越窗口,手动将虚拟移动键状态更改为"未按下",进行加速器翻译,然后恢复我的手动修改。在代码中:
BOOL CHexaEditor::PreTranslateMessage(PMSG pMsg){
// pre-processing the Message
if (::GetFocus()==m_hWnd){ // I'm not sure if this is mandatory in MFC
if (pMsg->message==WM_KEYDOWN){
BYTE keyboardState[256];
::GetKeyboardState(keyboardState);
const BYTE shiftState0=keyboardState[VK_SHIFT];
keyboardState[VK_SHIFT]=0; // 0 = "not pressed"
const BOOL result=::TranslateAccelerator(m_hWnd,hDefaultAccelerators,pMsg);
keyboardState[VK_SHIFT]=shiftState0;
::SetKeyboardState(keyboardState);
return result;
}else
return ::TranslateAccelerator(m_hWnd,hDefaultAccelerators,pMsg);
}else
return FALSE;
}
到目前为止还没有成功,任何帮助都高度赞赏。谢谢: - (
,因此正确答案是(感谢上面的ybungalobill(:
BOOL CHexaEditor::PreTranslateMessage(PMSG pMsg){
// pre-processing the Message
if (::GetFocus()==m_hWnd){
if (pMsg->message==WM_KEYDOWN){
BYTE keyboardState[256];
::GetKeyboardState(keyboardState);
const BYTE shiftState0=keyboardState[VK_SHIFT];
keyboardState[VK_SHIFT]=0;
/* --> */ ::SetKeyboardState(keyboardState); // this line was missing
const BOOL result=::TranslateAccelerator(m_hWnd,hDefaultAccelerators,pMsg);
keyboardState[VK_SHIFT]=shiftState0;
::SetKeyboardState(keyboardState);
return result;
}else
return ::TranslateAccelerator(m_hWnd,hDefaultAccelerators,pMsg);
}else
return FALSE;
}
相关文章:
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- 热键/按钮,根据需要进行编译,但不运行(在F5和Ctrl+Shift+B之间)
- OSX MetalKit CVMetalTextureCacheCreateTextureFromImage失败,状态:
- std::future_error:无关联状态
- 如何避免LED在循环状态变化中闪烁?
- boost 是否有按特殊类型值编码状态"compact optional"?
- 为什么系统函数总是在C++中返回已转移的退出状态?
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 当可输入框在窗口中处于活动状态时获得通知的任何方法
- 检查两个节点在子节点上是否具有相同状态的更优雅的方法
- 将有状态的 lambda 传递到 C 样式函数中,而无需上下文参数
- 在 nullptr 上调用无状态类的非静态成员函数是否合法?
- 编译问题:在函数"_start"中:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- C++部分概念 id:显式模板规范顺序/第一个参数的特殊状态的原因是什么?
- 试图在崇高中奔跑. 错误 已发生: 收集2.exe: 错误: ld 返回 1 退出状态
- 在容器上移动分配:以前包含的对象的状态
- collect2:错误:ld 返回 1 个退出状态未定义的引用
- 通过TranslateAccelerator检测快捷方式时,忽略Shift键的状态
- 如何告诉如果shift是按下numpad输入与NumLock上?或者至少获得NumLock状态