1

PostMessage(または他の関連する方法のいずれかで)送信されたメッセージに優先順位を付けることは可能ですか?

たとえば、メッセージである IIRC はWM_PAINT、キューに他のメッセージがない場合にのみ処理されます。カスタム メッセージで同様の動作を実現することは可能ですか?

WM_PAINT(WndProc を制御する) ウィンドウにカスタム メッセージを配信するために特別なパラメーターを使用すると、同様の動作になりますか?

4

2 に答える 2

1

WM_PAINTウィンドウ処理コードではDefWndProc、フラグを設定するだけで、次にGetMessage呼び出されたときにキューが空の場合にのみそのフラグをチェックします。一部のマウス メッセージも結合されます (新しいメッセージが到着すると、古いメッセージは削除されます)。

本当の答えは、実際に達成したい動作によって異なります。

再入可能性を回避しようとしている場合は、次のようなクイック終了のフラグを確認してください。

////bool processing = false; // class/window instance variable
...
void HandleCustomMessage()
{
    ////if (processing)
    ////{
    ////    return;
    ////}

    ////processing = true;
    DoSomething();
    ////processing = false;
}

実際の優先キューが必要な場合は、多数の PQ 実装があります。データ項目を PQ に追加し、カスタム メッセージを投稿します (常に同じ ID)。次に、カスタム メッセージ ハンドラーは PQ に最も優先度の高いアイテムを要求します。


もう 1 つのオプションは、GetMessageループをインターセプトし、何かすることがあるかどうかを確認するために への呼び出しを使用し、メッセージが利用可能かどうかPeekMessageを呼び出すか、そうでない場合は PQ を確認することです。GetMessageこのアプローチでは、カスタム メッセージは必要ありません。

于 2009-11-25T16:34:13.617 に答える