【问题标题】:How do I write multiple GetAsyncKeyState with C++如何用 C++ 编写多个 GetAsyncKeyState
【发布时间】:2014-08-15 08:52:07
【问题描述】:

我的问题是我在哪里可以添加这行代码:

if( GetKeyState(VK_F2) & 0x8000 )

我尝试了不同的方法,但是当我编译并运行它并按 F1 或 F2 键时,它会执行所有功能。我想在按下键时调用 F1 键功能,在按下键时调用 F2 键。我正在使用 Visual Studio 2010 Express。

这是我的代码:

switch(uMsg)
{
case WM_INITDIALOG:
    {
        // do something here
        break;
    }
case WM_TIMER:
    {
        if( GetKeyState(VK_F1) & 0x8000 )

        if( GetKeyState(VK_F2) & 0x8000 )

        {

            // do something here

        }
        break;
    }
case WM_CLOSE:
    {
           // do something here
    }
}
return 0;

【问题讨论】:

  • 我认为在你的情况下,当你想在按下一个键时做某事,或者在按下另一个键时做另一件事,你应该使用 GetKeyState 函数。另请注意,此评论包含如何操作的提示。

标签: c++ windows visual-studio-2010 visual-studio


【解决方案1】:

已解决:) 我的问题在尝试了一段时间后终于解决了,我终于明白了 是那个小小的“休息”吗?声明请看代码它的工作完美无缺。 非常感谢您的宝贵时间和帮助

case WM_TIMER:
    {
        if(GetKeyState(VK_F1) & 0x8000 )
    {
        MessageBoxA (NULL, TEXT ("This is a call from F1 key!"), TEXT("Test F1 key"), MB_OK );
    }

        //break; << this was the one that was giving me the problem 

         if(GetKeyState(VK_F2) & 0x8000 )
    {
        MessageBoxA (NULL, TEXT ("This is a call from F2 key!"), TEXT("Test F2 key"), MB_OK );
    }

        //if(GetKeyState(VK_F3) & 0x8000 ) << i can add multi VK_ keys here

        break; // << should be here
    }
case WM_CLOSE:

【讨论】:

    【解决方案2】:

    几点:

    1. 您确定要这样投票吗?也许您想在用户按下这些键(例如 WM_KEYDOWN)而不是定期轮询时响应通知?如果您在WM_TIMERs 之间按下并释放 F1,您的代码很容易错过。
    2. 正如 Joachim Pileborg 所说,您可能应该使用 GetKeyStateGetAsyncKeyState 作用于调用时的键盘状态; GetKeyState 作用于当前消息发送时的键盘状态。这往往会使事情更紧密地同步。也就是说,如果您在 WM_TIMER 进行投票,那可能没那么重要。
    3. 您只是检查返回值是否非零,这不是该函数的工作方式。返回值是一个位掩码。来自文档:

    如果高位为1,则key为down;否则,它就起来了。

    如果低位为 1,则键被切换。一个键,如 CAPS LOCK 键,如果打开,它会被切换。如果低位为 0,则该键处于关闭状态且未切换。切换键时键盘上的切换键指示灯(如果有)将亮起,当键未切换时熄灭。

    因此,要检查 F1

    if( GetKeyState(VK_F1) & 0x8000 )
    {
        ...
    }
    

    【讨论】:

    • 我不知道,如果(GetKeyState(VK_F2)和0x8000)我应该在哪里写下一个代码,因为你知道我是编程语言的新手,谢谢你的帮助和时间感谢
    • 您需要扎实的编程语言基础才能充分利用本网站。如果您不理解答案,那么发布问题没有多大意义。您的问题不在于检查是否按下了按键,而在于基本 C++ 语法。
    • 除了别人说的,看看GetKeyboardState(),这样就可以同时查看多个按键的状态,而不必进行多个函数调用。
    • 谢谢您,先生,我正在考虑如何只制作一个函数而不是多个函数调用可能需要一些时间:) 但无论如何我都渴望学习它感谢您的帮助和时间谢谢您
    猜你喜欢
    • 1970-01-01
    • 2018-05-14
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多