回答編集履歴

3

AttachThreadInput の記述を訂正

2018/11/06 17:10

投稿

atata0319
atata0319

スコア881

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

アクセラレーターについて追記

2018/11/06 17:10

投稿

atata0319
atata0319

スコア881

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

誤字の修正

2018/11/06 03:08

投稿

atata0319
atata0319

スコア881

test CHANGED
@@ -1,6 +1,6 @@
1
- GUI アプリケーションをマルチスレッド化する意義とは GUI の応答を担保するためにブロック処理(スレッドの実行を中段する処理)をバックグラウンドで動作させることにあります。そのため、同一の GUI に所属するウィンドウをマルチスレッドで動作せる意はほとんどありません。
1
+ GUI アプリケーションをマルチスレッド化する意義とは GUI の応答を担保するためにブロック処理(スレッドの実行を中段する処理)をバックグラウンドで動作させることにあります。そのため、同一の GUI に所属するウィンドウをマルチスレッドで動作せる意はほとんどありません。
2
2
 
3
- ただし、例外として OpenGL 等のようにレンダリングを担当するコンポーネントをマルチスレッドで動作させることはあります。
3
+ 例外として OpenGL 等のようにレンダリングを担当するコンポーネントをマルチスレッドで動作させることはままあります。
4
4
 
5
5
 
6
6