PeekMessage

PeekMessageは、ウィンドウメッセージが来ているかを確認するWindowsAPI・・・。

PeekMessage 関数

これまでは、GetMessageでウィンドウメッセージを取得して、取得できたらそれをウィンドウプロシージャに送出していた・・・。
ウィンドウメッセージが来るまでGetMessageから抜けることはないが、その間は待機状態となるので、無駄な時間ができる・・・。
この時間をアイドル時間といい、このアイドル時間を有効に使うためにPeekMessageでウィンドウメッセージが来ているかを確認する・・・。
来ている場合は、真(TRUE)となるのでGetMessageで取得し、処理をすればいい・・・。
来ていない場合は、偽(FALSE)なので、待機状態用の処理を実行できる・・・。

今回は、iCountというint型変数を待機状態の時だけ、TextOutで描画し、iCountを1増やす・・・。
ただ、1000超えたら0にリセットするけど・・・。

ウィンドウを表示したら、GetDCでデバイスコンテキストハンドル取得・・・。

常にTRUEの無限ループにする・・・。

PeekMessageでメッセージが来ているか確認する・・・。
この使い方の場合、PM_NOREMOVEにする・・・。
PM_REMOVEにすると、処理されたとしてメッセージキューから削除されてしまい、その後のGetMessageで取得できなくなる・・・。
なので絶対PM_NOREMOVE・・・。
で、GetMessageで1以上ならメッセージが取得できたのでメッセージ処理・・・。
そうでないならエラー・・・。

PeekMessageが偽(FALSE)の場合は、メッセージが来ていないので、TextOutでiCountを表示して、その後iCountを1増やす・・・。
で1000を超えたら0にリセット・・・。

実行すると、

f:id:BG1:20150414121040p:plain

速過ぎてわかんないけども・・・。
一応カウントされてることはわかる・・・。

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