AfxMessageBoxが残ったまま後の処理が

[戻る]
トシカズ 2005/07/21(木) 06:51:14
第一段階としてソースまで載せてませんが、ご質問させて下さい。
Visual C++6.0SP4 Win2000SP4上で作ったあるプログラム中で
AfxMessageBox関数でOK,キャンセルを問い合わせ、OKなら
処理中、数字を画面のスタティックテキストに表示してモニターさせながら
日次更新などのバッチ処理させる部分を書いたのですが
時々そのメッセージボックスが消えないうちに後の処理が開始され
モニターの数字はボックスと重なる部分は前面に現れて見れるのですが
過ぎたメッセージボックス表示も残っいて見苦しかったりします。
バッチ処理が終了すればボックスも同時に消えて
プログラムが落ちたりはしないのですが、あのボックス表示が残ったまま
後の処理がされたりするのを防ぐ方法ありますでしょうか?
AfxMessageBox関数の使用に関係して仕方無かったりするのでしょうか?
何かお心当たりある方いらっしゃいましたら、ご助言下さいませ。
よろしくお願い致します。

トシカズ 2005/07/21(木) 06:53:51
追記・・・↑フォームビューアプリからの処理です。

dairygoods 2005/07/21(木) 10:09:27
バッチ処理の前にメインウィンドウを再描画
(RedrawWindow か UpdateWindow)するとどうなりますか?

PATIO 2005/07/25(月) 15:23:54
例えば、言われているAfxMessageBox関数の呼び出し位置が処理の途中だったとすると
ダイアログ自体が消えた後の自ウインドウの再描画が走る前に後続の処理が走ってしまって
ウインドウの再描画が後回しにされる事があるためではないかと思います。
Windowsのプログラムを作っていて感じるのは画面の描画をOSに任せると後回しにされる
ケースが結構あるということです。
これは画面よりも内部の処理を優先させているためだと思います。
実際のところ、WM_TIMERにしても内部処理が続いている間は保留状態になりますし、
GUIを使ったプログラムの場合、コンソールプログラムにはない部分で気を使う必要が
あると思います。

dairygoodsさんが書かれているように明示的に再描画を指示してやればうまく行くのでは
ないかと私も思います。
但し、実際のソースが開示されていないのでプログラムの作りによってはそうは行かない
かもしれません。

古いスレッドには追加発言できません。