5

C++ Windows 環境でキーボード コントロールを参照する場合、0x80 コードは何を意味しますか?

例えば、

if(GetKeyState('K') & 0x80) { 
    //do something 
}

みんな、ありがとう!

4

4 に答える 4

8

アップデート

反対票が殺到したため、私はこれをさらに調査することになりました。戻り値 (16 進数) がどのように機能するかを次に示しますGetKeyState。キーのトグル プロパティはよくわかりませんが、トグル元kのデフォルト状態があると想定しています。

0      Default State, key up
ff80    Default state, key down
1       Toggled, key up
ff81    Toggled, key down

0xff80上位ビットを設定する必要があり、下位ビットが意味をなす場合はいつでもSoが追加されます。これで、この0x80アプローチが機能する理由がわかりました。下位バイトの上位ビットも設定されているからです。

古い回答

GetKeyStateSHORTは、上位ビットが である場合、キーが有効であることを意味する を返します1。のビットごとの AND演算は、0x80そのビットが であるかどうかをチェックするだけです。10x8010000000

したがって、ステートメントGetKeyState('K') & 0x80は、によって返される0x80値の上位ビットが であり、上位ビットが である場合に戻ります。GetKeyState('K')100

于 2010-04-30T18:41:14.140 に答える
3

関数のMSDN ドキュメントには次のように記載されています。

上位ビットが 1 の場合、キーはダウンしています。それ以外の場合は、アップしています。

ビット単位で 0x80 を使用すると、上位ビットが得られif、結果がゼロか非ゼロかをチェックし、本質的にそのビットの値をチェックします。

GetKeyState()ただし、このチェックはa を返しSHORT、short の上位ビットをチェックするには、ビット単位で 0x8000 を使用する必要があるため、間違いのように見えます。
したがって、デバッガーで戻り値を確認し、これが実際にどのように機能するかを確認することをお勧めします。

于 2010-04-30T18:41:36.623 に答える
2

0x80 ではなく 0x8000 を意味していると思います。その場合は、ドキュメント ( http://msdn.microsoft.com/en-us/library/ms646301(VS.85).aspx ) を参照してください。このドキュメントには、GetKeyState の戻り値について次のように記載されています。 -

戻り値は、指定された仮想キーのステータスを次のように指定します。

• 上位ビットが 1 の場合、キーはダウンしています。それ以外の場合は、アップしています。• 下位ビットが 1 の場合、キーはトグルされます。CAPS LOCK キーなどのキーは、オンになっている場合に切り替えられます。下位ビットが 0 の場合、キーはオフであり、トグルされていません。キーボード上のトグル キーのインジケータ ライト (存在する場合) は、キーがトグルされるとオンになり、キーがトグルされないとオフになります。

私が知る限り、0x80は何の意味もありません

于 2010-04-30T18:41:45.183 に答える
1

ドキュメントによると

戻り値は、指定された仮想キーのステータスを示します。
上位ビットが 1 の場合、キーは停止しています。それ以外の場合は、アップしています。
下位ビットが 1 の場合、キーはトグルされます。CAPS LOCK キーなどのキーは、オンになっている場合に切り替えられます。下位ビットが 0 の場合、キーはオフであり、トグルされていません。キーボード上のトグル キーのインジケータ ライト (存在する場合) は、キーがトグルされるとオンになり、キーがトグルされないとオフになります。

おそらく、トグル不可能なキー (「K」など) では、下位(あいまいな用語 - おそらく 0x0080 を意味しますか?)と上位 (0x8000) ビットは同じことを行いますか?

于 2010-04-30T18:40:37.823 に答える