C++ 如何捕获组合键ALT+;CTRL+;使用C+;中的预翻译消息插入+;
我想使用C++中的C++ 如何捕获组合键ALT+;CTRL+;使用C+;中的预翻译消息插入+;,c++,key,C++,Key,我想使用C++中的preTranslateMessage()捕获组合键,如ALT+CTRL+INSERT,如下代码所示。我没能得到我所期望的。我试着修改逻辑代码这似乎不是最好的解决方案。此外,使用键盘加速器可能会解决我的问题。但我无法确切地了解如何处理这个过程 请任何人给我一些可能的解决办法 BOOL BMWView::PreTranslateMessage(MSG* pMsg) { //static int k_ctrlPressed,k_altPressed,k_insertPre
preTranslateMessage()
捕获组合键,如ALT+CTRL+INSERT
,如下代码所示。我没能得到我所期望的。我试着修改逻辑代码这似乎不是最好的解决方案。此外,使用键盘加速器可能会解决我的问题。但我无法确切地了解如何处理这个过程 请任何人给我一些可能的解决办法
BOOL BMWView::PreTranslateMessage(MSG* pMsg)
{
//static int k_ctrlPressed,k_altPressed,k_insertPressed = 0;
static int keylog_var = 0;
if (pMsg->message == WM_KEYUP )
{
switch (pMsg->wParam)
{
case VK_CONTROL: if(keylog_var==0) keylog_var = 1; else keylog_var = 0;
break;
case VK_MENU: if(keylog_var==1) keylog_var = 2; else keylog_var = 0;
break;
case VK_INSERT: if(keylog_var==2) keylog_var = 3; else keylog_var = 0;
break;
default: keylog_var = 0;
break;
}
//Switch case is replaced with below if statement
if(keylog_var == 3)
{
keylog_var = 0;
// Set mode
CWnd *pWnd = (CWnd *)this;
pWnd->PostMessage(ID_ENTRY, 0L, 0L);
}
}
return BView::PreTranslateMessage(pMsg);
简单。使用
GetKeyState
捕获ALT+CTRL+INSERT
,并测试pMsg
的VK\u INSERT
BOOL CTestView::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message==WM_KEYDOWN)
{
BOOL bCtrl=::GetKeyState(VK_CONTROL)&0x8000;
BOOL bShift=::GetKeyState(VK_SHIFT)&0x8000;
BOOL bAlt=::GetKeyState(VK_MENU)&0x8000;
switch(pMsg->wParam)
{
case VK_INSERT :
if( bCtrl && bAlt )
{
MessageBox(" Ctrl+Alt+INSERT ", " ",MB_OK);
}
break;
}
}
return CView::PreTranslateMessage(pMsg);
}
使用加速器确实是最干净的解决方案。你应该这样做。