CViewで作成したプログラムに
標準で開くや保存といった機能がついていますが、開けるファイルの拡張子
をどのようにすれば追加できるのでしょうか?
---------------------------------------------------------------------
1.
*.htm と *.html のような、ファイルの種類は同じだけど拡張子が違う場合
まず、CWinApp 派生クラスの InitInstance の中で
CDocTemplate 派生クラス(CSingleDocTemplate / CMultiDocTemplate )の
インスタンスを作っているところに着目してください。
コンストラクタの第一引数を覚えておきます。
次に、String Table リソースを見て、さっきの第一引数と同じ ID を持つ
文字列を探します。
\n で区切られた文字列になっているはずですが、それを \n ごとに分解
すると、その4番目がファイルダイアログに表示するフィルタ名、
5番目が実際のフィルタ文字列になっています。
ここに、セミコロンで区切って複数の拡張子を書いてやれば実現できます。
---------------------------------------------------------------------
2.
*.html と *.exe など、複数のファイルの種類に対応したい場合
まず、CWinApp 派生クラスの InitInstance の中で
CDocTemplate 派生クラス(CSingleDocTemplate / CMultiDocTemplate )の
インスタンスを作っているところに着目してください。
これを真似して、ファイルの種類の数だけ CDocTemplate 派生クラスの
インスタンスを作ります。
その際、コンストラクタの第一引数に注意してください。
ファイルの拡張子、ドキュメントの名前などは、この第一引数と同じ ID を
持つ StringTable リソースから取得されるため、ファイルの種類の数だけ
StringTable に文字列を追加してやる必要があります。
作成したすべての CDocTemplate インスタンスを AddDocTemplate で追加
してやれば、複数の拡張子に対応できます。
返信ありがとうございます。
書かれたとおりにやってみたのですが、
私が思っていたものと少しだけ違っていました。
開くを選択したときに表示されるリストボックスに
複数の形式を追加したいのです。
たとえばこんな感じです。
---
テキスト形式(*.txt)
画像形式(*.bmp;*.jpg)
すべての形式(*.*)
---
テンプレートを追加するやり方では
はじめにどのタイプにするかを聞かれて、
開くときは、そのタイプの形式しか表示されませんでした。
そうですか?
今試してみたら、「ファイルを開く」ダイアログのフィルタには
そのように表示されますけど。
タイプの選択ダイアログが出るのは「新規作成」の時じゃないですか?
追記
後者の方法では、String Table 以外にも
アクセラレータ、アイコン、メニュー他、
CDocTemplate のコンストラクタの第一引数と同じ ID を持つリソースを
作ってやらないと失敗します。
すみません、私の勘違いのようです。
再度確認してみたら、表示されていました。
確かに、アイコンやメニューなどのIDも作成しないと
起動時に「空のドキュメントが・・・」
っていうメッセージが表示されてしまい
エラーになってしまいますね。
「開く」を実行し、ファイルを選択したあとに落ちてしまう
のは、どこか設定を間違っているからなのでしょうか?
うーん…今試してみたところ、ウチでは落ちなかったです。
MFC のソースコードの中にある、CDocManager::OnFileOpen あたりを
ステップ実行してみると、問題の箇所が特定できるかもしれません。
ツイート | ![]() |