
親ダイアログのボタンが押された際、
親ダイアログのCWnd*を渡して、Topmost=TRUEの
プロパティを持つ子ダイアログを
モードレスで表示させるようにしました。
子ダイアログは、スタティックテキストと
アニメーションコントロールのみを配置した
ダイアログで、OnInitDialogにてaviファイルを
ロード・再生しています。
スタティックテキストはリソースへの埋め込みです。
ボタン押下後、ダイアログを表示させる関数を呼び、
その後、一定時間Sleepをさせるようにしました。
(時間のかかる処理の代わりに)
現象としては、ボタン押下後、子ダイアログは
表示され、アニメーションも子ダイアログ表示後、
1~2秒ほどで再生されるのですが(このタイムラグも若干不満)、
スタティックテキストが、親側のSleepが終わるまで
表示されません。
OnInitDialogでスタティックテキストを再設定してやるように
してもダメでした。
回避策はありますでしょうか?
No.4ベストアンサー
- 回答日時:
>スレッド側で処理を行うというのは、処理自体をワーカースレッドに移して
>マルチスレッドで作成するということでしょうか?
>(素人的な質問ですみません。。。)
そうです。GUIに関係ない処理をワーカースレッドで処理します。
ボタン押下→ワーカースレッド起動→ボタン押下の処理終了
です。
GUI系のプログラムはすぐ処理を終わらしてメッセージループに戻ることを基本としてください。MFCだとなるべく早くメンバ関数の処理は終わらせる事が原則です。
そうしないと親と子のウィンドウ操作が処理が終わるまで何も出来ません。応答のないプログラムと見なされますよ。
No.3
- 回答日時:
>スタティックテキストが、親側のSleepが終わるまで
>表示されません。
親側のSleep中は、プロセスのメッセージキューに溜まったメッセージは処理されません。
その溜まったメッセージの中に「スタティックテキストを描画して下さい」と言うメッセージが含まれている場合、親側のSleepが終るまで、スタティックテキストは描画されません。
スタティックテキストを再設定したとても、やはり「再設定されたので、スタティックテキストを再描画して下さい」ってメッセージがメッセージキューに溜まるだけで、スタティックテキストは描画されません。
メインスレッド(メッセージのキューイング処理をしているスレッド)で時間がかかる処理をする場合は、一旦、実行権を放棄して、メッセージキューが正しく処理されるようにしましょう。
No.2
- 回答日時:
>本来、子ダイアログは、親が処理中ですよってことを
>明示するためのダイアログでして、現在、テスト段階のため、
>親の処理が早く終わりすぎるため、処理自体をコメントアウトして
>代わりにSleepをさせています。
Winアプリで長い処理はGUI系の操作が出来なくなるのでやっていけません。
もし長い処理が必要なら、長い処理はスレッド側でやらせてGUI側は常に待機状態と言うのが基本です。
スレッドとGUI側はメッセージ等で状況を伝え合うのが良いかと思います。
この回答への補足
スレッド側で処理を行うというのは、処理自体をワーカースレッドに移して
マルチスレッドで作成するということでしょうか?
(素人的な質問ですみません。。。)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBSの処理中一旦処理を止めて再...
-
Excel VBA で処理中断(DoEvents...
-
InvalidateRectがうまくいかない
-
VBSで応答不要のメッセージボッ...
-
VB.NETのUsingキーワードの使い方
-
エクセルVBAでクリップボード内...
-
ファイヤーフォックスのブラウザ
-
MFCのメニューバーのイベント取得
-
UNIX Cでの複数タイマー処理の...
-
【C#】 あるイベントから別イ...
-
MFCのView終了時の終了確認
-
VCでウエイトをミリ秒でかけ...
-
ACCESS側からEXCELの書式を設定...
-
エディットコントロールへの表示
-
ループを使わずに、特定時間に...
-
Macターミナルで実行中のプログ...
-
バックグラウンドのプロセスの...
-
スーパーのレジで並んでいたら...
-
プロセスはファイルにアクセス...
-
i-mode
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSの処理中一旦処理を止めて再...
-
メッセージボックスのボタン名変更
-
VBA kernel32 の意味
-
ACCESS側からEXCELの書式を設定...
-
Application.ScreenUpdating=Fa...
-
Excel VBA で処理中断(DoEvents...
-
エクセルVBAでクリップボード内...
-
VBSで応答不要のメッセージボッ...
-
VBA、UserFormを前面に出力して...
-
【C#】 あるイベントから別イ...
-
【MFC】イベントの無効化について
-
「キャンセル」ボタン付きの処...
-
シャットダウン時のExcel強制終...
-
MFCのワーカースレッドとUIスレ...
-
Excel VBA 実行中に一瞬フリー...
-
Excel(VBA)シート上のコマンド...
-
VB.NETで数秒間msgboxの...
-
サスペンド(休止やスタンバイ...
-
ループを使わずに、特定時間に...
-
起動後直に実行するコードはど...
おすすめ情報