7

コードのどこかに、PeekMessageイベントを取得するために呼び出すループ関数があります。

現在、次のようになっています。

while (PeekMessage(&Message, NULL, 0, 0, PM_REMOVE))
{
    // Process events
}

ここで、別の場所で入力を管理したいと考えています。つまりWM_KEYDOWNWM_MOUSEMOVE(マウスとキーボードのイベント) などのメッセージを別の場所で、メイン ループの別の時間に取得したいと考えています。

PeekMessageWM_KEYFIRSTの 3 番目と 4 番目の引数により、返されるメッセージの範囲を定義できるため、提供されたマクロ、WM_KEYLASTWM_MOUSEFIRSTおよびを使用してこれを使用できますWM_MOUSELAST。しかし、入力をチェックする範囲が 2 つあり、残りのすべてに対して 3 つの範囲があるため、不便です。

最後のパラメーターはフラグで、入力として渡すことができPM_REMOVE | PM_QS_INPUTます。しかし、他のすべてのメッセージを取得したい場合は、他のループに何を渡す必要がありますか? PM_QS_EVERYTHING_EXCEPT_INPUTマクロはありません...

これを行う最もエレガントな方法は何でしょうか?

4

1 に答える 1

1

「フィルター」を使用してみてください。Win32 はその「フック」を呼び出します。msdn の SetWindowsHookEx 関数を見てください。キーボードとマウスのメッセージにスレッド固有のフィルターをインストールする可能性があります。次に、メッセージをメンテナンスのキューにプッシュし、後で手動でアクセスできます (選択した場合は、そのスレッドのパブリック キューから関連するメッセージをフックから削除できるため、ユーザー キューのみがメッセージ)。ただし、関心のあるすべてのケースで、PeekMessage スイッチからこの use-queue に直接直接プッシュすることもできます。

于 2012-05-14T10:12:58.023 に答える