質問

以下は私のメッセージフィルターです。

bool MyFilter::PreFilterMessage(Message %m){
    switch(m.Msg){
    case WM_CLOSE:
    case WM_DESTROY:
    case WM_NCDESTROY:
    case WM_QUIT:
        Debug::WriteLine(L"Gone!");
        break;
    case WM_MOUSEMOVE:
        Debug::WriteLine(L"A mouse! Catch! Catch!!! CATCH!!");
        break;
    }
    return false;
}

ほとんどのメッセージを問題なくフィルタリングしていることを確認しました。ただし、ウィンドウの閉じるボタンをクリックした後にディスパッチされたメッセージを受信しません(WM_CLOSE, WM_DESTROY, WM_NCDESTROY そして WM_QUIT)。どうしてこれなの?

役に立ちましたか?

解決

IMessageFilter.PreFilterMessage() は、メッセージ キュー内のメッセージに対してのみ呼び出されます。WM_CLOSE のようなメッセージは、SendMessage() を使用して WndProc() に直接送信され、キューをバイパスします。また、WM_ACTIVATE、WM_GETTEXT などのメッセージも受信されません。イベントを入力する、それだけです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top