回答編集履歴

1 修正

Chironian

Chironian score 22464

2018/11/06 02:34  投稿

こんにちは。
> 1)別スレッドで子ウィンドウを作成してもいいものなのでしょうか?
可能です
たぶんできると思いますが、ちょっと自信がありません。複数のスレッドでそれぞれがウィンドウを作ることは可能です。異なるスレッドで生成したウィンドウの間に親子関係をもたせることができるかどうかについてはできたような気もしますが、あまり自信がありません
> 2)別のスレッドではメインのメッセージループを取得できるものなのでしょうか?
できません。そのスレッドでメッセージループを回す必要があります。
> 3)別のスレッドではそのスレッドのメッセージループをかけると子ウィンドウとして安全ではなくなりますよね?どのような手段をとればいいですか?
そんなことはないです。といいますか、Windowsのウィンドウはそれを生成した「スレッド」に属します。
そして、そのウィンドウにメッセージを分配するのは、作成したスレッドのメッセージループ(ポンプ)です。
なお、.NETのGUIは全く事情が異なります。.NETフレームワークはGUIスレッドのみがGUIをアクセスすることを前提に設計されているようです。なのでサブスレッドが.NETのGUIを触るのは危険です。.NETのGUIデータはWindowsのカーネルモードを通さずに、ユーザモードで直接アクセスするものもあるからだろうと思います。
なお、.NETのGUIは全く事情が異なります。.NETフレームワークはGUIスレッドのみがGUIをアクセスすることを前提に設計されているようです。なのでサブスレッドが.NETのGUIを触るのは危険です。.NETのGUIデータはWindowsのカーネルモードを通さずに、ユーザモードで直接アクセスするものもあるからだろうと思います。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る