画像入りRTFファイルをダイアログに表示

[戻る]
くるぶし 2006/03/18(土) 00:58:10
初めての投稿で失礼致します。
いつも勉強させてもらっています、VC++初心者のくるぶしです。

開発環境:Visual Studio 2005
開発言語:C++(MFC) ActiveXコントロールは使用しない。
開発アプリケーション:ダイアログベース

困っている事:
画像入りRTFファイルを指定し、RTFファイルの内容を
そのまま(画像、テキスト、テキストスタイル)ダイアログに表示したいです。
どのようにすれば実現可能でしょうか?
表示したいタイミングとしてはOnInitializeDialog()です。

勉強不足だとは思いますが、どなたかご教授ください。

くるぶしが調べたこと。
・CRichEditCtrl:このコントロールはテキストとテキストスタイルのみ表示可能(?)
・CRichEditView:コントロールではなくてViewだから・・・ダイアログベースには・・・
・CRichEditBox(ActiveXコントロール):ActiveXコントロールは極力使用したくないです。

若干返答が遅くなるかと思いますがよろしくお願いいたします。
以上長文失礼致しました。

PATIO 2006/03/20(月) 16:17:01
CRichEditViewもCRichEditCtrlも内部ではIRichEditOleを使っているようなので
多分、変わらないのではないかと思います。
単純にCRichEditViewで画像が表示できるかだけであれば、SDIのテストアプリを
作ってみれば、確認はできると思います。
ActiveXコントロールを使いたくない理由が良くわかりませんけれど、
まずは、CRichEditBoxで画像の表示をサポートしているのか調べて見ても
良いのではという気もします。
この辺は試すだけであれば、比較的簡単に出来ると思うのでまずは試してみる事を
お勧めします。また、既に試しているのであれば試した結果まで書いておいた方が良いです。

最終的に何がやりたいのかと言う事を書いておけば、代替案を紹介してもらえるかもしれ
ません。
できれば、具体的にどういうことがやりたくて質問内容のようなことをしようと
しているのかまで書いた方が良いかも知れません。

くるぶし 2006/03/21(火) 00:53:42
返答遅れて申し訳ございません。
PATIOさん、適切なアドバイスありがとうございます。

最終的にやりたい事:
ダイアログベースアプリケーションに、ファイルで指定したリッチテキストを表示させたい。
※表示させたいリッチテキストは、画像(BMP)が張り付いている、文字スタイルが設定さ
れている。

現在困っている事:
上記「最終的にやりたい事」がMFCで実現可能かどうか。
また、実現可能であれば具体的な手段が知りたい。

開発環境:Visual Studio 2005
開発言語:C++(MFC) ActiveXコントロールは使用しない。
開発アプリケーション:ダイアログベース

調べたこと:
CRichEditView:
SDIアプリケーションのViewをCRichEditViewに変更し、RTFファイルを指定し表示すると、
RTFファイルの内容そのまま表示できる。(画像・文字スタイル)

CRichEditCtrl:
ダイアログベースアプリケーションにCRichEditCtrlを配置し、
クリップボードにコピーした、RTFファイルの内容(画像・文字スタイル)を
配置したCRichEditCtrl内に貼り付けたが、画像が出力されない。

ダイアログベースアプリケーションのOnInitializeDialog()内で、以下アドレスを参考にし、
http://msdn2.microsoft.com/en-us/library/h2hkhzhe.aspx
RTFファイルを出力してみたが、画像が出力されない。(指定しているフラグが"SF_RTF"
だからあたりまえ)

CRichEditBox(ActiveXコントロール):
フォームアプリケーションにCrichEditBoxを配置し、
クリップボードにコピーした、RTFファイルの内容(画像・文字スタイル)を
配置したCRichEditBox内に貼り付けると、クリップボードの内容が表示される。(画像・
文字スタイル)

乱文・長文で読みにくい、目的が明確に伝わっていない等不備があると思います。
何か思いついたこと、思ったことでもよいので、アドバイスください。

以上よろしくお願いいたします。

Ban 2006/03/21(火) 01:15:21
ダイアログベースではないですが、VC7.1 で簡単に CRichEditView を使って
試してみました。画像入りの RTF も表示はできました。
Wordpad でも表示できるので、まぁ RichEdit なら表示はできるでしょう。

Ban 2006/03/21(火) 05:56:39
# くるぶし さん(2006/03/21(火) 00:53:42)に気づかず…ブラウザの更新漏れ…orz

くるぶし さんの話を受けてダイアログで試してみましたが、確かに絵は出ませんね。
クリップボード経由で CF_RETEXTOBJ とかも試してみましたがもちろん文字しか出ず。
CRichEditDoc とかもいないですし、考えてみれば当然で、自前で OLE の制御して
あげないと無理ぽです。

> 上記「最終的にやりたい事」がMFCで実現可能かどうか。

実現不可能になる理由がありませんので、可能か否かと聞かれれば可能と思います。
但し、ActiveX を使わずにダイアログベースというのは、無理してやる理由が
わからないくらいには面倒そうです。(きちんとSDI等にするか、ActiveX を使え、と)

> また、実現可能であれば具体的な手段が知りたい。

RichEditBox が内部でやってくれていること、CRichEditView/CRichEditDoc が内部で
やっていることを、自前で処理する必要があるわけで…CRichEditView/Doc/CtrlItem
等のソースを参考に、せこせこと OLE 対応するしかないかと。
# フォームビューとかにすればまだ複合ドキュメントくらいは使えるのでしょうが、
# ダイアログベースだとそもそも複合ドキュメントのサポートもない…。

ActiveX を使わないのは、環境的な制約なんでしょうか。
可能なら、使ってしまうのが最も簡単だとは思います。

くるぶし 2006/03/21(火) 13:14:51
[[解決]]
Banさん早速の返答ありがとうございます。
とても丁寧でわかりやすく適切なアドバイスでした。

CRichEditCtrlを使用せず、なんらか別の方法で実現を考えて見ます。

別の方法で実現方針(今考えつくやりかた)
・CRichEditCtrlにこだわりOLE制御をコーディングする。
 >コーディングに時間を割きたくないので考えない。

・ダイアログベースではなくCRichEditViewのSDIベースに変更する。
 >別機能(現在ダイアログベースで実現している機能)がSDIで実現可能か検証し、移
行する。

・ActiveXコントロールを素直に使用する。
 >依頼元と相談し、ActiveXコントロール使用可能にしてもらう。

・「RTFファイル読み込み」という仕様を変える。
 >大技。

本件はここで解決済みチェックを入れておきますが、
何か上記以外でもこんなのどう?等ありましたらご連絡ください。

皆様ありがとうございました。
また、不明な点等ありましたら、今後ともよろしくお願いいたします。

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