ループ中にEDITBOXの内容を逐一変更するためには

解決


たちき  2006-06-21 14:48:06  No: 62265  IP: 192.*.*.*

forでループ実行中、現在何回目のループを行っているかをEDITBOXに表示させようとしています。
EDITBOXにメンバ変数を与えてSetWindowTextで文字列を送信しているのですが、
ループ中は全く回数が表示されず、ループ完了後にやっと表示されるといった状態です。
下記に該当するプログラムを、少々端折っていますが掲載いたしますので
なにとぞご教授お願いいたします。
なお、Windows2000Pro、VC++6.0使用です。

--------------------------

  int i;
  CString count;

  for (i = 1 ; i <= 1000000 ; i++)
  {
/*
    ここにプログラムを記述
*/
    count.Format("%d",i);
    m_hoge.SetWindowText(count);  // m_hogeは現在のループ回数を表示するためのEDITBOXメンバ変数
  }
// ループ終了後、EDITBOXには「1000000」と表示されている

編集 削除
Blue  2006-06-21 14:56:34  No: 62266  IP: 192.*.*.*

m_hoge.UpdateWindow();
をSetWindowsTextのあとに入れてみてください。


類似スレ
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=336107&SiteID=7

編集 削除
たちき  2006-06-21 15:03:06  No: 62267  IP: 192.*.*.*

Blue様、ありがとうございます。
見事ループ処理中にカウントが表示されるようになりました。

それにしても、全く同じような質問があったとは気づきませんでした。
いろんなテクニックが記載されていたので参考にしたいと思います。

編集 削除
PATIO  2006-06-21 15:04:54  No: 62268  IP: 192.*.*.*

通常、ウインドウでは画面の描画はイベントハンドラ関数から
抜けてから実行されます。そのため最後しか描画されないのです。
これは処理中に一々画面の更新をしていると処理時間が掛かって
しまう為ですが、どうしても必要であれば、強制的に画面を更新する必要があります。
ループ内でUpdateWindowを行えば、多分更新されるようになると思います。

編集 削除
PATIO  2006-06-21 15:05:28  No: 62269  IP: 192.*.*.*

がーん、間に合わなかった。

編集 削除