一次调用功能

时间:2020-07-26 19:45:18

标签: c++ winapi

    if (GetKeyState(VK_DOWN) & 0x80)
    {
        func();
    }

当我按键时,它会像4次一样调用func() 我希望它在按键时只打一次电话

编辑:

    SHORT keyState;
    SHORT keyState2;
    SHORT keyState3;

    static bool toogle1 = false;
    static bool toogle2 = false;
    static bool toogle3 = false;

    if (keyState = GetAsyncKeyState(VK_DOWN) && !toogle1)
    {
        toogle1 = true;
    }
    else
        toogle1 = !toogle1;

    if (keyState2 = GetAsyncKeyState(VK_NUMPAD0) && !toogle2)
    {
        toogle2 = true;
    }
    else
        toogle2 = !toogle2;

    if (keyState3 = GetAsyncKeyState(VK_NUMPAD1) && !toogle3)
    {
        toogle3 = true;
    }
    else
        toogle3 = !toogle3;

这是我的操作方式,它将起作用吗?

2 个答案:

答案 0 :(得分:0)

static bool once = false;
if (GetKeyState(VK_DOWN) & 0x80)
{
    if (!once)
     {    once = true; func();     }
}

答案 1 :(得分:0)

我猜你是循环运行的。在调用时切换标志的想法很不错,但是由于在其他情况下将其切换回原来的位置,因此您调用func()的频率是以前(每2次)的一半。 当您想再次调用它时(根据您的代码,我想您想要),当再次按下该键而不是向函数调用发送垃圾邮件时,您可以使用变量来存储最后一次按下的键,并且仅调用{{ 1}},当它是另一个键时(您也可以添加“未按下任何键”状态。

如果您真的只想调用一次,只需删除else语句即可。

相关问题