如何在mac上运行的过剩程序中检测命令键作为修饰符?

时间:2010-09-03 17:40:35

标签: macos opengl glut keyboard-events

我正在mac上开发一个GLUT程序。 Mac似乎以有趣的方式通过GLUT传递修饰符。 glutGetModifiers()不会捕获Alt键和控制键,而是将它们转换为按钮int。 glutGetModifiers()或按钮int似乎没有捕获命令键。此外,它不会显示为我的glutKeyboardFunc(...)中的键。

有没有办法在GLUT中捕获/检测命令(apple)键?

2 个答案:

答案 0 :(得分:2)

glutGetModifiers仅检测到CTRL,ALT和SHIFT,而不是密钥。

我知道如何执行此操作的唯一方法是使用Carbon

#include <Carbon/Carbon.h>

KeyMap keyStates ;
bool IS_KEYDOWN( uint16_t vKey )
{
  uint8_t index = vKey / 32 ;
  uint8_t shift = vKey % 32 ;
  return keyStates[index].bigEndianValue & (1 << shift) ;
}

void checkInput()
{
  // This grabs all key states, then checks if you were holding down ⌘ or not
  GetKeys(keyStates) ;
  if( IS_KEYDOWN( kVK_Command ) )
    puts( "⌘" ) ;
}

答案 1 :(得分:0)

虽然Carbon解决方案在某些情况下更好,但也可以在mac os x上直接修补和替换GLUT框架以支持命令键。 This patch捕获命令键并定义相应的修饰符掩码GLUT_ACTIVE_COMMAND