エディットボックスへの表示

[戻る]
ももたろう 2005/06/02(木) 09:31:24
みなさん

大容量ファイルの読込についてはいろいろとアドバイスを頂きまして
ありがとうございました。あのあと、お絵描きをする必要が出てきまして、
ダイアログベースに移植中です。

やりたいことは、「forループ中でエディットボックスに値を表示させる」
です。「 AfxMessageBox("Clear !!");」を入れて、毎回止めると値を
表示するのですが、コメントアウトしてしまうと全く表示されません。

for(it=0; i<N_AVE; i++)
{
 li.QuadPart = (FILE_HEADER_SIZE + (LONGLONG)n_total_shot * EVN_DATA_SIZE + 
nshot * EVN_DATA_SIZE);
 SetFilePointerEx(hFile, li, NULL, FILE_BEGIN);
 n = ReadFile(hFile, data, sizeof(RAW_Data), &dwResult, NULL) ;
 j =  sprintf(buffer, "%I64d ",li);
 j += sprintf(buffer + j, "%3d %5.1f", i, DATA);
 ss = buffer;
 GetDlgItem(IDC_EDIT3)->SetWindowText(ss);
 AfxMessageBox("Clear !!");
}

どのようにプログラミングしたらよいか悩んでおります。ご教示頂よろしく
お願い致します。

Ban 2005/06/02(木) 10:14:16
エディットボックスに文字列を SetWidnowText すると、
以前の内容が上書きされて新しい文字列が表示されます。
以前の内容に連結してくれるわけではありません。

・以前の内容を覚えておいて、自分で連結してから SetWindowText
・GetWindowText で以前の内容を取得し、自分で連結してから SetWindowText

など、自分で以前の文字列も表示するようにしてあげないと、
実際に画面に表示されるのは一番最後の文字列のみになります。

dairygoods 2005/06/02(木) 10:29:35
ループ中はイベント処理されないので、
画面の更新もされません。

UpdateWindow() で強制的に
描画イベントを処理させることができます。

ももたろう 2005/06/02(木) 12:03:48
[[解決]]
Banさん、dairygoodsさん

こんにちは。ありがとうございました。下記のように変更して、改行させつつ
無事に表示させることができました。
ありがとうございました。

for(it=0; i<N_AVE; i++)
{
 li.QuadPart = (FILE_HEADER_SIZE + (LONGLONG)n_total_shot * EVN_DATA_SIZE + 
i * EVN_DATA_SIZE);
 SetFilePointerEx(hFile, li, NULL, FILE_BEGIN);
 n = ReadFile(hFile, data, sizeof(RAW_Data), &dwResult, NULL) ;
 j =  sprintf(buffer, "%I64d ",li);
 j += sprintf(buffer + j, "%3d %5.1f\r\n", i, DATA);
 ss = ss + buffer;
 GetDlgItem(IDC_EDIT3)->SetWindowText(ss);
 UpdateWindow();
// AfxMessageBox("Clear !!");
}

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