如何处理sdi mfc中的按键ctrl+shift+A

问题描述 投票:0回答:1

我是vc++新手。如何处理sdi mfc中的按键Ctrl+Shift+A。 对于 Ctrl+A,代码工作正常。

case _T('A'): 

     if(GetKeyState(VK_CONTROL) & 0x8000){
         MessageBox(_T("Key Ctrl+A is pressed"));
     }
     else if((GetKeyState(VK_CONTROL) & 0x8000)&&(GetKeyState(VK_SHIFT) & 0x8000)){
         MessageBox(_T("Key Ctrl+Shift+A is pressed"));
     }
    
    break;
visual-c++ mfc
1个回答
4
投票

无论是否按下

Shift
键,您的第一个 if 子句都是 true,因此您永远不会到达
else
子句。如果您更改陈述的顺序,您将同时得到:

case _T( 'A' ): 
    if ( ( GetKeyState( VK_CONTROL ) < 0 ) && ( GetKeyState( VK_SHIFT ) < 0 ) {
        MessageBox( _T( "Key Ctrl+Shift+A is pressed" ) );
    } else if ( GetKeyState( VK_CONTROL ) < 0 ) {
        MessageBox( _T( "Key Ctrl+A is pressed" ) );
    }
    break;

如果您想全局处理按键,您可以使用 键盘加速器 来代替。设置加速器最直接的方法是通过ACCELERATORS 资源

© www.soinside.com 2019 - 2024. All rights reserved.