【问题标题】:Special key input not working (Enter, backspace, tab etc)特殊键输入不起作用(回车、退格、制表符等)
【发布时间】:2019-08-04 15:24:37
【问题描述】:

我的按键代码适用于所有键盘字母,但不适用于 EnterTab 等键。

glfwSetCharCallback(window, character_callback);


void character_callback(GLFWwindow* window, unsigned int codepoint)
{
    char c = codepoint;
    printf("%c", c);
}

当我按下 TabEnter 时,该功能甚至没有运行,但它确实适用于 Space 栏,我该怎么做关于接收所有按键?

【问题讨论】:

  • 空格键产生一个可打印的 ASCII 字符——它不是一个“特殊”键,所以它可以正常工作也就不足为奇了。
  • 知道如何获取 Enter 键代码吗?改用 windows 输入会是不好的做法吗?
  • @PaulMcKenzie 实际上,Enter 和 Tab 也产生 ASCII 字符(回车和水平制表符,分别),与空格键产生的一样可打印。但 GLFW 不想将它们视为文本键。

标签: c++ glfw


【解决方案1】:

您应该使用glfwSetKeyCallback,而不是glfwSetCharCallback,因为您对键而不是字符感兴趣。请参阅Keyboard Input docslist of keyboard key macros

我不确定为什么 TabEnter 不产生字符:它们通常会在其他工具包中分别产生 0x090x0d(例如freeglut 和 Qt)。但显然,这是 GLFW 想要的方式,请参阅他们的问题 Backspace not reported to character callbacks

elminreda 于 2017 年 4 月 12 日发表评论•

对 Enter 和 Backspace 等键使用键回调。它提供新闻、重复和发布事件。

【讨论】:

  • 这似乎可行,但现在我在按下按键时得到多个输入,有没有办法将其限制为一个输入/按键?
  • @DylanRobertson 检查回调的action参数,确保不是GLFW_REPEAT
猜你喜欢
  • 2017-03-02
  • 1970-01-01
  • 1970-01-01
  • 2018-05-19
  • 1970-01-01
  • 2021-10-26
  • 1970-01-01
  • 1970-01-01
  • 2020-09-17
相关资源
最近更新 更多