不可能です。各ウィンドウはそれを作成したスレッドに属し、その所有権は譲渡できません。
メッセージ ポンプを別のスレッドに配置することは問題ではありません。各スレッドには、独自のメッセージ キューがあります。メッセージをウィンドウに送信または投稿すると、OS はそのウィンドウを所有しているスレッドを確認し、メッセージをそのスレッドのメッセージ キューに送ります。スレッドは、自分のメッセージ キュー以外は読み取ることができないため、別のスレッドのウィンドウのメッセージをスレッドに処理させることはできません。
John's answer の最初のアイデアのように、メッセージを別のスレッドに再ディスパッチできますが、汎用のメッセージ ハンドラーとして、それは価値があるよりも複雑になります。多くのメッセージはウィンドウの状態を変更することを意図していますが、ウィンドウ自体のスレッド以外で状態を変更することはできません。一部のメッセージは、意味のある戻り値を取得する目的で送信されますが、メッセージが処理されるまで何を返すかがわからないため、ワーカー スレッドがメッセージを処理するのを待ってブロックする必要があります。
実際にワーカー スレッドにオフロードできるメッセージの小さなセットを特定し、それらを特別に処理する方がよいでしょう。これを行うと、メッセージが別のスレッドで処理されるウィンドウは実際にはありません。通常のワーカー スレッドを作成するだけで、推論するのに混乱が少なくなります。
処理に多くの時間を必要とするメッセージがウィンドウに送信されているが、送信者が結果を知る必要がない場合、または処理を終了する前に結果を知っている場合は、 を呼び出して早期に応答ReplyMessage
できます。 . これにより、ウィンドウのスレッドが追加の作業を行っている間、送信スレッドを実行し続けることができます。