PostMessage(または他の関連する方法のいずれかで)送信されたメッセージに優先順位を付けることは可能ですか?
たとえば、メッセージである IIRC はWM_PAINT、キューに他のメッセージがない場合にのみ処理されます。カスタム メッセージで同様の動作を実現することは可能ですか?
WM_PAINT(WndProc を制御する) ウィンドウにカスタム メッセージを配信するために特別なパラメーターを使用すると、同様の動作になりますか?
PostMessage(または他の関連する方法のいずれかで)送信されたメッセージに優先順位を付けることは可能ですか?
たとえば、メッセージである IIRC はWM_PAINT、キューに他のメッセージがない場合にのみ処理されます。カスタム メッセージで同様の動作を実現することは可能ですか?
WM_PAINT(WndProc を制御する) ウィンドウにカスタム メッセージを配信するために特別なパラメーターを使用すると、同様の動作になりますか?
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 に最も優先度の高いアイテムを要求します。
GetMessageループをインターセプトし、何かすることがあるかどうかを確認するために への呼び出しを使用し、メッセージが利用可能かどうかPeekMessageを呼び出すか、そうでない場合は PQ を確認することです。GetMessageこのアプローチでは、カスタム メッセージは必要ありません。