私のコードのどこかにイベントを取得するためにPeekMessage
を呼び出すループ関数があります。PeekMessageを使用して入力(マウス+キーボード)以外のすべてのメッセージを取得する方法
は現在、それは次のようになります。
今while (PeekMessage(&Message, NULL, 0, 0, PM_REMOVE))
{
// Process events
}
私は、そのような中WM_KEYDOWN
、WM_MOUSEMOVE
(マウスとキーボードのイベント)などのメッセージを取得したいという意味、別の場所で入力を管理したいと思います私のメインループの別の時間に、別の場所。
PeekMessage
の第三及び第四の引数は、返されるメッセージの範囲を定義することを可能にするので、私は提供マクロWM_KEYFIRST
、WM_KEYLAST
、WM_MOUSEFIRST
とWM_MOUSELAST
を使用し、これを使用することができます。しかし、入力をチェックする2つの範囲と残りのすべての3つの範囲があるため、不便です。
最後のパラメータはフラグで、入力にはPM_REMOVE | PM_QS_INPUT
を渡すことができます。しかし、その後、私は他のすべてのメッセージを取得したい、他のループで何を渡すべきですか? PM_QS_EVERYTHING_EXCEPT_INPUT
マクロはありません。
これを行うにはどのような方法が最適でしょうか?
最後に存在しないフラグは '〜PM_QS_INPUT'として視覚化できます。これはビット単位のORで' PM_REMOVE'と組み合わせることができます。 – chris
はい、解決策になる可能性があります。しかし、このフラグには、1)どのタイプのメッセージを取り出すか(PM_QS_ *)、2)メッセージ(PM_REMOVE、PM_NOREMOVE、でもPM_NOYIELDとは違う2つのセメント設定したい、そして次のバージョンのWindowsで新しいフラグを設定する可能性があります)。私は実際の値を見ても、2つのセメントを分離するためのマクロは見つかりませんでしたが、最初の16ビットは2番目のビットに予約されています。 – Benlitz
私の間違いは、 '〜PM_QS_INPUT'を使って、そのタイプのフラグに適用されるビットの範囲だけをマスクすることです。脳はそこで失敗しなければならなかった。したがって、前半は0、前半は0、後半のPM_QS_INPUTは1になります。 – chris