GetAsyncKeyStateを調べた後、WASDキーを使用して画面上で架空の文字を移動するコード例で調べました。GetAsyncKeyStateの戻り値が説明と一致していないようです
は、私は、そのMSDNのページでこれを読んで:
戻り値
タイプ:SHORT
関数が成功すると、戻り値はキー が押されたかどうかを指定しますGetAsyncKeyStateへの最後の呼び出し以降、および キーが現在アップまたはダウンしているかどうかを示します。最上位ビットがセットされている場合
、 キーがダウンして、最下位ビットが設定されている場合、キーは GetAsyncKeyStateの以前の呼び出し後に押されました。
私はトラブルの戻り値の構造を理解することを抱えている:私はあなたが0000000000000000
として、バイナリでは、数字のゼロを表すことができたとし、それを通じてので、それはタイプがshort
であると言う
、または0x0000
(私の知る限り、1桁の16進数は4桁の2進数を表します)。
の最上位ビットは、キーを押したときに設定する必要があります。それは私が言ったビットが設定された場合、番号は次のように見えるだろう、と思います:
:私のプログラムでは、それをよりよく利用するために1000000000000000
、私はにその結果、進にそれを変換することによって、それを短縮しました
0x8000
8
は16進数で1000
に対応する必要があります。
上記のメカニズムが私のプログラムでは機能していないことがわかりました(GetAsyncKeyState(chr) == 0x8000
を実行すると、キーが押されたかどうかに関わらず常にfalseになります)。最初の例をもう一度見ました。 。戻り値は数値-32767
と比較されていました.Windows電卓を使用してすぐに16進数に変換すると、値0xFFFFFFFFFFFF8001
になります。今、最下位ビットもアクティブであるかどうかをチェックするのに使用されるビットなので、最後の16進数(1)は気にしないでください。しかし、私の場合はそうしたくありません。私はここでは理解できない
ものは次のとおりです。
- なぜ、ここでは、1 16進数は4進数を表し、関数の出力値が短い(2バイト)であれば数字は16桁の16進数で表されますか?それらの8バイトではありませんか?
- キーが押されている場合、の最上位ビットは1に設定され、
1000000000000000
ではなく0000000000001000
のように見えることがわかりました。私はここで何が欠けていますか?
何がありますか?表現の前に? –
@GabrieleCirulli:これはboolに変換するための最短方法です。このコンテキストでは、次のようになります。 '(GetAsyncKeyState(chr)&0x8000)!= 0' – ybungalobill
ああ、そうです。ありがとう。 –