CtrlGLUT_ACTIVE_CTRL マクロを使用してキーが押されたかどうかを検出するために GLUT を使用する方法に関する多くの情報を見つけました。このマクロは、明らかに、キーボードまたはマウスのコールバック関数内でのみ機能します。メインループのある時点でキーが押されたかどうかを知る必要がありCtrlますが、GLUT_ACTIVE_CTRL はこのコンテキストでは機能しないようです。
それで、プラットフォームに依存しないGLUTっぽい方法で、キーのキーアップとキーダウンイベントをCtrl(他のキーを入力せずに)検出する方法はありますか?
Ctrl編集:キーが押されたとき、キーボード コールバックは (少なくともデフォルト設定では) 発生しません。Ctrlこれは基本的な問題です。別のキーが押されたときにキーが押されているかどうかしかテストできないため、キーボードコールバックが発生します。
私のセットアップは次のようなものです:
// ... in main function:
glutKeyboardFunc(keyboard);
//later in the code:
void keyboard(unsigned char key, int _x, int _y)
{
printf("keydown \n");
if (glutGetModifiers() == GLUT_ACTIVE_CTRL) {
printf("control key is pressed.\n");
}
//etc.
通常の文字「keydown」を押すと、標準出力に出力されます。キーを押してCtrlも何も起こりません。Ctrl+を押すとC、「キーダウンコントロールキーが押されました。」印刷されます。
ただし、メインループに次を追加しました。
if (glutGetModifiers() == GLUT_ACTIVE_CTRL) {
printf("Control key down.\n");
} else {
printf("Control key up.\n");
}
常に「Control key up」と表示されます。Ctrlキーを押しているかどうかに関係なく。