長文の表示方法

[戻る]
まる 2002/05/23(木) 10:30:48
いつもお世話になっております。
まると申します。
Win2000、VC++6.0、SDKで開発してます。

ダイアログボックス上に、長文を表示するコントロールと、ボタンをつけたいと思います。
そこで現在悩んでいる事は、その長文を何で表示するか?という点です。
(文は、編集不可能、プログラムで変更しない(固定文字列)にしたいと考えてます。)

リソースエディタを見ると、長い文字列を表示するのは、
@リッチエディット(エディットボックス?)
Aスタティックテキスト
だと思うのですが、
スタティックテキストだと、長文の表示はできないと思いました。
そこで、リッチエディットが最適かな?と考えたのですが、
リッチエディットを使って表示しようとすると、
長文を文字列で保存しておくか、別ファイルに保存して読み込んだ後
WM_INITDIALOGでエディットボックスに表示させる方法しかないと思いました。
しかし、別ファイルのテキストを作りたくないので、文字列で保存するしかないかな?
と考えております。

そこで、みなさまにお聞きしたいのですが、
長文(固定テキスト文書)を表示させたい時に、よい方法はありますでしょうか??
良い実装方法がありましたらご教授ください。
よろしくお願い致します。

いもちぃ 2002/05/23(木) 10:56:26
カスタムリソースとして持っておくことができます。
http://www.kumei.ne.jp/c_lang/
第4章をごらんあれ。

いもちぃ 2002/05/23(木) 10:57:16
第4章ではなく第4部でした

dairygoods 2002/05/23(木) 11:04:27
長文の長さにもよりますが、
・ダイアログに収まる長さならスタティックテキスト
・ダイアログに収まらずスクロールが必要であり、
 長文が64kバイト以下ならエディットボックス
・長文が64kバイト以上あるか、文字に色をつけたり
 複数のフォントを使用したりしたい場合は、リッチエディット

まる 2002/05/23(木) 11:46:10
いもちぃさん、dairygoodsさん、お返事いただきありがとうございます。!!

>いもちぃさん
カスタム・リソースの意味がよくわからなかったので、あとでよく調べてみます!
ただ、お教えいただいたHPの317章のサンプルを見た限り、文章の保存は
char text[][256]={・・・,・・・}
という感じで、普通の2次元配列を持っているように思うのですが、
これがカスタムリソースというものなのでしょうか?

>dairygoodsさん
スクロールが必要になるので、自分でもエディットにしようと思っておりましたが、
普通のエディットボックスとリッチエディットの違いはしりませんでした。
しかし、なぜ64kバイト(全角32768文字?)なのでしょうか?
そして、もし64kバイトの長文を保存してエディットに表示する場合、
やはり上記の2次元配列で256×256で文を保存すべきなのでしょうか?

初歩的かもしれないことを度々お聞きして申し訳ありませんが、
何卒よろしくお願い致します。

dairygoods 2002/05/23(木) 12:11:21
> しかし、なぜ64kバイト(全角32768文字?)なのでしょうか?
エディットボックスを作った人がそう決めたから(^^;

> そして、もし64kバイトの長文を保存してエディットに表示する場合、
> やはり上記の2次元配列で256×256で文を保存すべきなのでしょうか?
カスタムリソースとは、任意のファイルをEXEの中に組み込む方法です。
[挿入]-[リソース]-[インポート]で別ファイルとして作っておいた
テキストファイルをリソースとして取り込むことが出来ます。

「猫でも〜」で紹介されてるのは、GIFファイルの場合ですね。
これをテキストファイルに読み替えればよいかと。

PAI 2002/05/23(木) 12:17:34
横レス失礼します。

VCで言うリソースってわかります?アイコンとか、メニューとか、ビットマップとか。
あれはデザイン中は別ファイルとして存在するのに、最終的な実行ファイルでは
結合されますよね。そういうリソースを自分の好きな型で作成できるのが
カスタムリソースです。

エディットボックスについてですが、
64kまでなのはコントロール自体の歴史的な理由、16bitの壁です。
Win95のメモ帳に64K以上のファイルを読ませると落ちるアレです。

プログラム内部での文字列表現としては、別に2次元配列にする必要はないです。
文字列リテラルをえんえんと続けてもべつに間違いではありません。
そうした場合保守作業が大変になるし、美しくないので、カスタムリソース等を
使用するわけです。
具体的にはリソースファイルを修正し、
プログラム上では FindResource, LoadResource 等のAPIを使用します。

PAI 2002/05/23(木) 12:18:52
あ、かぶっちゃいましたね、すみません。

[E-Mail] 2002/05/23(木) 13:03:05
ご質問の主旨にあうかわかりませんが。

以前デバック情報を表示しつづける機能をアプリにもたせた時は
リストボックスを使用してました。
ソートのチェックをはずして、表示したい情報を追加していけば
良いだけですんで。

表示できれば良いだけなら、こんな選択肢もありなんではないでしょうか。

PAI 2002/05/23(木) 13:41:07
んさん、それよさげですね、
今度使わせてください。

まる 2002/05/23(木) 14:16:28
dairygoodsさん、PAIさん、んさん、度々お返事いただきありがとうございます!

>dairygoodsさん、PAIさん
カスタムリソースの意味わかりました!!
*.RCファイルと同様に、任意のファイルをリソースとしてプロジェクトに入れ、
コンパイル時にファイル(リソース)としてEXEに組み込むって感じであってますか??
今回の場合テキストファイルをリソースとすることになると思いますが、
その時テキストのリソースをロードしたあとの
エディットボックスにセットする方法をもう少し勉強しないと私にはできなさそうです。
しかし、すごく勉強になりました。
ありがとうございます。

>んさん
リストボックスですか?
全く想像しておりませんでした!
表示だけできればよいと考えているので、その方法を試してみたいと思います!!

今からそれを実装してみたいと思います。
でき次第、再度結果をご報告させていただきます。
いろいろご意見をいただきありがとうございました。

まる 2002/05/23(木) 17:43:08
[[解決]]
折り返しなどを考える為にリストボックスをやめ、
エディットボックスでの表示ができるようになりました!!

また、カスタムリソースとしてテキストファイルをEXEに入れ、
リソースをロード・ロックした戻り値での表示も上手くいき、すごく感動しました!!

みなさまご教授いただき本当にありがとうございました。
また、今後ともよろしくお願い致します。

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