結果表示について


atsushi  2004-12-16 19:50:48  No: 55712

あるプログラムの実行結果をスタティックに表示しているんですが、
表示量が多くて設定したメモリからあふれてしまいます。
メモリをあまり確保せずに(最低限のメモリの確保で前の表示を消さずに繰り返し新しい結果を追加表示していく。)、
今は、
sprintf(str,"・・・",...,...);
SetWindowText(GetDlgItem(hWnd, ID), (LPCTSTR)str);
という感じなんですが、


tetrapod  2004-12-16 21:22:21  No: 55713

だから質問は何?


atsushi  2004-12-16 21:58:55  No: 55714

前の表示を消さずに、新しい表示を追加したいんです。


シャノン  2004-12-16 22:04:01  No: 55715

今は Static に表示しているのと同じ内容をメモリにも持っていて、メモリ上の文字列に追記してから SetWindowText してるから、この保持しているのがデカくなりすぎて困る、ということですか?
Static ではどうだか知りませんが、Edit ならば追記が出来ますので、書き込み不可能にした Edit を使ってみてはいかがでしょうか。


atsushi  2004-12-16 22:48:35  No: 55716

わかりました、やって見ます。


atsushi  2004-12-16 23:41:47  No: 55717

改行が反映されないんですが、
SetWindowTextじゃだめなんですか?


シャノン  2004-12-17 00:08:46  No: 55718

何がしたいんですか?
SetWindowText を使うことが目的じゃないでしょう?
SetWindowText は、対象のウィンドウの文字列全てを書き換えます。
つまり「追記」はできません。
追記したように見せるためには、前のテキストと追記したいテキストをメモリ内に持っておかなくてはなりません。
それでメモリ消費が大きくて困る、というのが当初の問題なんですよね。
というわけで、SetWindowText は使えません。

エディットボックスは改行させることが出来ます。
改行が反映されないのは、プログラミングがどこか間違えているからです。


なーめ  2004-12-17 03:42:03  No: 55719

>> 改行が反映されないんですが、
>> SetWindowTextじゃだめなんですか?

改行コードは "\n" だけじゃだめです。"\r\n" と書いてください。

>> この保持しているのがデカくなりすぎて困る

2行目が入らないので勘違いしたのではないかな?


atsushi  2004-12-17 18:54:21  No: 55720

ごめんなさい。説明が悪いみたいですね・・・。
詳しく説明します。
ダイアログボックスである計算を行って、その結果を、同じダイアログボックスの結果表示のところに表示したいんですが、
計算結果は、計算ファイル名、結果座標、スコア、計算時間があって、それを、計算が終了するごとに、表示していきたいんです。
そこで、まえの結果の次の行から、次の結果を表示するような形をとりたいんですが、
計算するファイルの数が、100個ほどあるんで、全部の結果データをいったんメモリに持たずに、1結果分のメモリのみ保持して、
計算が終わる→結果をメモリに→表示→計算→結果をメモリに上書き→表示・・・
というループを作りたいんです。
わかっていただけたでしょうか・・・。
よろしくお願いします。


三毛猫  2004-12-17 19:49:25  No: 55721

えーと、その方法をシャノンさんが説明されているのだと思いますが。
今出力を行っているのは、エディットボックスでしょうか?
もしそれで改行が出来ないのでしたら、
なーめさんが仰るように改行コードが間違っているか、
エディットボックスのスタイルが間違っているかでしょう。

で、SetWindowTextでは内容を丸ごと全部書き換えてしまうので、
これでは「atsushiさんが望む追記」は出来ないという事です。
# GetWindowText,SetWindowTextで出来ない事もないですが、
# たぶんお望みの動作とは違うでしょう。

いわゆる追記そのものって操作はありませんので、
EM_〜系のメッセージを組み合わせて操作する事になります。
EM_SETSEL、EM_REPLACESEL辺りを調べてみて下さい。


シャノン  2004-12-17 22:22:43  No: 55722

> 計算結果は、計算ファイル名、結果座標、スコア、計算時間があって、それを、計算が終了するごとに、表示していきたいんです。
> そこで、まえの結果の次の行から、次の結果を表示するような形をとりたいんですが、

Static より Edit より、ListView があってる気がする。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加