親ダイアログのボタンが押された際、
親ダイアログの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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- Windows 10 MSアカウントの「個人設定をクラウドから削除します」は機能していないのでしょうか? 1 2022/11/20 17:01
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- その他(Microsoft Office) Office(Windows版,Word/Excel/PowerPoint等)にログインできません 4 2022/07/24 15:18
- Excel(エクセル) マクロでボタンにつける名前がどこに設定されているかわからないケースがありました。 1 2023/06/19 19:37
- 画像編集・動画編集・音楽編集 AfterEffectでのシャターの挙動がおかしい 1 2023/05/07 00:38
- JavaScript 空白で入力フォームのボタンをクリックしたら、ブラウザの上部からjavascriptで 表示されるアラ 1 2022/05/20 11:16
- その他(プログラミング・Web制作) pythonでアプリが終了されたときに特定の処理を実行したい 2 2023/01/19 17:13
- その他(ソフトウェア) UnityのPublishing SettingsでCreate Keyを押しても反応しない 1 2023/06/27 01:03
このQ&Aを見た人はこんなQ&Aも見ています
-
10代と話して驚いたこと
先日10代の知り合いと話した際、フロッピーディスクの実物を見たことがない、と言われて驚きました。今後もこういうことが増えてくるのかと思うと不思議な気持ちです。
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
治せない「クセ」を教えてください
なくて七癖という言葉どおり、人によっていろいろなクセがありますよね。 あなたには治せないクセがありますか?
-
何歳が一番楽しかった?
自分の人生を振り返ったとき、何歳のころが一番楽しかったですか? 子供の頃でしょうか、それとも大人になってからでしょうか。
-
【選手権お題その2】この漫画の2コマ目を考えてください
サッカーのワンシーンを切り取った1コマ目。果たして2コマ目にはどんな展開になるのか教えてください。
-
ダイアログ内コントロールの位置取得について
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】看板の文字を埋めてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・【穴埋めお題】恐竜の新説
- ・我がまちの「給食」自慢を聞かせてっ!
- ・冬の健康法を教えて!
- ・一番好きな「クリスマスソング」は?
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESS側からEXCELの書式を設定...
-
PostMessageの連続送信
-
Excel(VBA)シート上のコマンド...
-
VB6でフォームをリロードしたい
-
VBSの処理中一旦処理を止めて再...
-
【C#】 あるイベントから別イ...
-
Windowsがシャットダウンする前に
-
Excel VBA 実行中に一瞬フリー...
-
エクセルVBAでクリップボード内...
-
VBA、UserFormを前面に出力して...
-
ボタンが押された事を検知する...
-
メッセージボックスのボタン名変更
-
vb.netでバッチ処理
-
MFCのワーカースレッドとUIスレ...
-
Excel VBA 自動的に閉じるMsgBox
-
VBスクリプトで「お待ち下さい...
-
VCでウエイトをミリ秒でかけ...
-
VB6 コマンドボタン クリック...
-
スタティックテキストが表示さ...
-
「VBでExcel上PictureBoxダブル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSの処理中一旦処理を止めて再...
-
VBA kernel32 の意味
-
メッセージボックスのボタン名変更
-
ACCESS側からEXCELの書式を設定...
-
VBA、UserFormを前面に出力して...
-
VBA メッセージボックスを自動...
-
エクセルVBAでクリップボード内...
-
VBSで応答不要のメッセージボッ...
-
Excel VBA で処理中断(DoEvents...
-
MFCのワーカースレッドとUIスレ...
-
ASP.NETでのメッセージ画面を出...
-
「キャンセル」ボタン付きの処...
-
Excel VBA 自動的に閉じるMsgBox
-
【C#】 あるイベントから別イ...
-
シャットダウン時のExcel強制終...
-
Application.ScreenUpdating=Fa...
-
ASP VBScriptでスクリプト実行...
-
起動後直に実行するコードはど...
-
フォルダ指定
-
DoEvents
おすすめ情報