回答編集履歴
3
AttachThreadInput の記述を訂正
test
CHANGED
@@ -22,7 +22,9 @@
|
|
22
22
|
|
23
23
|
|
24
24
|
|
25
|
-
親ウィンドウの所属するスレッドと子ウィンドウの所属するスレッドでフォーカスの授受がうまいこと行かないパターンがあるので、AttachThreadInput でスレッド間のメッセージキューの同期をとる必要があります。この制御を完璧にやろうとするとけっこうめんどうくさいです。
|
25
|
+
~~親ウィンドウの所属するスレッドと子ウィンドウの所属するスレッドでフォーカスの授受がうまいこと行かないパターンがあるので、AttachThreadInput でスレッド間のメッセージキューの同期をとる必要があります。この制御を完璧にやろうとするとけっこうめんどうくさいです。~~
|
26
|
+
|
27
|
+
気のせいでした。AttachThreadInput が必要になるのはトップレベルウィンドウが異なる場合のみです。別スレッドの子ウィンドウには問題なくフォーカス移動できました。
|
26
28
|
|
27
29
|
|
28
30
|
|
2
アクセラレーターについて追記
test
CHANGED
@@ -24,4 +24,10 @@
|
|
24
24
|
|
25
25
|
親ウィンドウの所属するスレッドと子ウィンドウの所属するスレッドでフォーカスの授受がうまいこと行かないパターンがあるので、AttachThreadInput でスレッド間のメッセージキューの同期をとる必要があります。この制御を完璧にやろうとするとけっこうめんどうくさいです。
|
26
26
|
|
27
|
+
|
28
|
+
|
29
|
+
他にアクセラレーターを処理する際、子ウィンドウの所属するスレッドからメインスレッド側に伝達する必要があったりします。子ウィンドウ側でアクセラレーターを処理する場合はその逆の処理が必要です。
|
30
|
+
|
31
|
+
|
32
|
+
|
27
|
-
なお、本題からはやや外れますがマルチスレッド(マルチプロセス)な ActiveX コントロール(正確には OLE オブジェクト)は
|
33
|
+
なお、本題からはやや外れますがマルチスレッド(マルチプロセス)な ActiveX コントロール(正確には OLE オブジェクト)はアクセラレーターやフォーカスを処理するための手段を提供しています。
|
1
誤字の修正
test
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
GUI アプリケーションをマルチスレッド化する意義とは GUI の応答を担保するためにブロック処理(スレッドの実行を中段する処理)をバックグラウンドで動作させることにあります。そのため、同一の GUI に所属するウィンドウをマルチスレッドで動作
|
1
|
+
GUI アプリケーションをマルチスレッド化する意義とは GUI の応答を担保するためにブロック処理(スレッドの実行を中段する処理)をバックグラウンドで動作させることにあります。そのため、同一の GUI に所属するウィンドウをマルチスレッドで動作させる意義はほとんどありません。
|
2
2
|
|
3
|
-
|
3
|
+
例外として OpenGL 等のようにレンダリングを担当するコンポーネントをマルチスレッドで動作させることはままあります。
|
4
4
|
|
5
5
|
|
6
6
|
|