1
xlibを使用してキーボード入力を取得しています。ボタンを押しているかどうかを確認するためにgetAsynckeystate()ウィンドウをシミュレートします。 。他のキーを押すか、同時にリリースされている場合でも、「Z」が押されている場合、この関数は常に次の関数をリンクnmのxlib XNextEventキーが押されているかどうかをチェックする
bool KeyboardState::keyPressed(Display* d, Window curFocus,int revert, Window root) {
XEvent ev;
XNextEvent(d, &ev);
clock_t startTime;
switch (ev.type) {
case FocusOut:
if (curFocus != root)
XSelectInput(d, curFocus, 0);
XGetInputFocus(d, &curFocus, &revert);
printf("New focus is %d\n", (int) curFocus);
if (curFocus == PointerRoot)
curFocus = root;
XSelectInput(d, curFocus, KeyReleaseMask | FocusChangeMask | KeyPressMask);
break;
case KeyPress:
ks = XLookupKeysym(&(ev.xkey), 0);
if (ks == XK_z) {
keyState = true;
startTime = clock();
}
break;
case KeyRelease:
if(ks == XK_z && startTime - clock() > 0){
ks = XLookupKeysym(&(ev.xkey), 0);
keyState = false;
}
}
return keyState;
}
'場合(KS == ...)...; ks = ...; '最初に変数を使用して値を代入すると、プログラムは不安定な動作をします。さらに、 'clock()'はチェックする間違った時間関数であり、いくつかの理由からチェック自体は冗長です。鍵盤を離す前に鍵盤を離すことはできません。 –
私のプログラムでは、プレスとプレスリリースが同時に発生することはありません。なぜ有名な「HOLD KEY」イベントをサポートしていないのですか? –
あなたの文章は解析できません。あなたのプログラムは、 'case KeyRelease'の直後にバグを修正しています。申し訳ありませんが、 'HOLD KEY'イベントが何であり、それが有名なのかどうかは分かりません。 –