c++ 在菜单的主页上禁用ESC键

mkshixfv  于 2023-04-08  发布在  其他
关注(0)|答案(2)|浏览(139)

我得提前发,我在C++方面还很缺乏经验。但我还是想学一点,我想参与一个开源项目(https://github.com/xcSoar/xcsoar)。在这里我正在改进一个新的菜单来控制运行XCSoar的设备(https://github.com/XCSoar/XCSoar/blob/master/src/OV/OpenVarioMenu.cpp).菜单响应ESC并跳回到它上面的子菜单.然而,即使在第一页,菜单响应ESC然后关闭,只有重新加载.我想抑制这一点.
如何仅在第一个菜单页上禁止ESC键?
我试过了

#include <Windows.h>
#include <iostream>

int main()
{
    while(true)
    {
        if (GetAsyncKeyState(VK_ESCAPE))
        {
            std::cout << "DUDE! You've pressed the escape key";
            std::cin.ignore();
        }
    }
    return 0;
}
mwkjh3gx

mwkjh3gx1#

我发现了一件事,几乎成功了:

bool KeyPress(unsigned key_code) noexcept override {
    CancelTimer();
    
  /* ignore escape key at first menu page */
    switch (key_code) {
    case KEY_ESCAPE:
      StartXCSoar();
      break;

    default:
      return false;
    }
    return RowFormWidget::KeyPress(key_code);
  }

我使用了StartXCSoar();测试它是否正常工作。在这种情况下,XCSoar启动,但escape键没有取消。离开XCSoar后将执行escape命令。我想我必须删除escape命令。

txu3uszq

txu3uszq2#

我找到了一个解决方案:

bool KeyPress(unsigned key_code) noexcept override {
    CancelTimer();

  /* ignore escape key at first menu page */
    if (key_code != KEY_ESCAPE) {
        return RowFormWidget::KeyPress(key_code);
    }
    else {
        return true;
    }
  }

相关问题