GetKeyState

GetKeyStateは、指定された仮想キーコードのキーが押されたかどうかを判定するためのWindowsAPI・・・。

GetKeyState 関数

キーの判定はWM_KEYDOWNのようなウィンドウメッセージでもできるが、この関数を呼んだときにキーが押されているかを確認したい場合は、これを使う・・・。

今回は、PeekMessageによるメインループの中でキーの判定をして、押されていたら描画している矩形を移動するようなものを作る・・。

メインループでウィンドウメッセージが来ている時は、

通常のメッセージ処理・・・。
来ていない時は、

GetKeyStateでキーが押されているか判定する・・・。
PeekMessageのメインループは非常に速いので、1ずつ増加減少にすると、すぐどこかに消えてしまう・・・。
そこでSleepを入れた上で、0.1ずつ増加減少させることにした・・・。
また、GetKeyStateは、戻り値の最上位ビットが1の時に押されている、0の時に押されていないという判定なので、0x8000との&(AND、つまり論理積)の真偽値で判定する・・・。

f:id:BG1:20151121182522p:plain

最初こんなんで、下を押すと、

f:id:BG1:20151121182539p:plain

こうなり、右を押すと、

f:id:BG1:20151121182552p:plain

こうなる・・・。
(Sleep(5)では点滅が速過ぎて見えないかも・・・。10以上でも厳しいかもしれない・・・。ダブルバッファリングにすればちゃんと見えると思うが・・・。)

Sample/GetKeyState.cpp at master · bg1bgst333/Sample · GitHub