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
このアプローチでは、カスタム メッセージは必要ありません。