Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何捕获组合键ALT+;CTRL+;使用C+;中的预翻译消息插入+;_C++_Key - Fatal编程技术网

C++ 如何捕获组合键ALT+;CTRL+;使用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

我想使用C++中的
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);
 }

使用加速器确实是最干净的解决方案。你应该这样做。