自前のOPENメソッドからドキュメントクラスへつなげる – プログラミング – Home

自前のOPENメソッドからドキュメント...
 
通知
すべてクリア

[解決済] 自前のOPENメソッドからドキュメントクラスへつなげる


熱血
 熱血
(@熱血)
ゲスト
結合: 15年前
投稿: 100
Topic starter  

VC++6.0 XP

CMainFrameクラスに自前のファイルオープンメソッドを追加したのですが、このあとド
キュメントクラスでどのようにして、読み込むか、わかりません。ご存知の方よろしく
おねがいします。
void CMainFrame::OnBitmapRead()
{
// TODO: この位置にコマンド ハンドラ用のコードを追加してください
CFileDialog wDialog (
TRUE, // TRUE: 開く FALSE: 閉じる
.bmp,
Untitled.bmp,
OFN_CREATEPROMPT,
Bitmap Files *.bmp | *.bmp,
NULL) ;

int result = wDialog.DoModal() ;
if (result == IDOK) {
CString wFileName = wDialog.GetPathName() ;
//ドキュメントクラスにつなげて、ドキュメントクラスで読み込みしたい。

AfxMessageBox(wFileName,MB_OK) ;
}

}


引用未解決
トピックタグ
熱血
 熱血
(@熱血)
ゲスト
結合: 15年前
投稿: 100
Topic starter  

viewクラスでは、GetDocument()がつかえて、ドキュメントクラスのメソッドなどが使え
ますが、そのようなことができるのでしょうか?


返信引用
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

なんでCMainFrameクラスにファイルオープンメソッドを追加しようと考えるのかなぁ。
素直にアプリケーションクラスのOnFileOpenをオーバーライドすればいいのに。


返信引用
熱血
 熱血
(@熱血)
ゲスト
結合: 15年前
投稿: 100
Topic starter  

maruさん、レスありがとうございます。多種類のファイルをオープンし、それぞれ、違
う加工方法をとり、意味合いもちがうので、そうしたいのですが、面倒なことになりそ
うですね。


返信引用
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

多種類のファイルを扱うなら、MDIにしてドキュメント種類毎にドキュメントテンプ
レートを準備、種類毎にそれぞれのテンプレートに管理させる。
(当然それぞれのテンプレート毎にビューもそのドキュメント種類毎に適したものに
する)

いずれににせよ、ドキュメントを管理するのはアプリケーションクラスであり、メイン
フレームではないので、CMainFrameクラスにファイルオープンメソッドを実装するのは
お門違い。
私なら、アプリケーションクラスのOnFileOpenをオーバーライドし、ファイル拡張子毎
異なるドキュメントテンプレートで処理を行う。


返信引用
gak
 gak
(@gak)
ゲスト
結合: 21年前
投稿: 132
 

> viewクラスでは、GetDocument()がつかえて、ドキュメントクラスのメソッドなどが使え
> ますが、そのようなことができるのでしょうか?
そのようなメソッドが無いワケでは無いので一応紹介。

CFrameWnd::GetActiveDocument
http://msdn.microsoft.com/ja-jp/library/cdc4chb3.aspx

CView::GetDocument() で返されるドキュメントクラスは一意だが、コレは「現在アク
ティブなビューに結び付けられている」ドキュメントクラスを返す点に注意。


返信引用
熱血
 熱血
(@熱血)
ゲスト
結合: 15年前
投稿: 100
Topic starter  

maruさん、gakさん、レスポンスありがとうございます。
質問が分岐しちゃいますが、アプリケーションクラスのOnFileOpenをオーバーライドし
た場合、なにかしないと、ドキュメントクラスのSerialize(CArchive& ar)は、呼ばれな
いです。どうしたらよろしいのでしょうか?ご存知でしたら、よろしくおねがいしま
す。読み込みメソッドは、ドキュメントクラスに書くのが妥当だとおもいますが・・


返信引用
熱血
 熱血
(@熱血)
ゲスト
結合: 15年前
投稿: 100
Topic starter  

maruさん、どうもありがとうございました。たすかりました。
OpenDocumentFile(fd.GetPathName());をよびだすことにより、ドキュメントクラスをよ
びだすことができました。
void CTest9App::OnFileOpen()
{
// TODO: この位置にコマンド ハンドラ用のコードを追加してください
CFileDialog fd(
TRUE, //開く
", //デフォルトの拡張子
", //デフォルトのファイル名
OFN_FILEMUSTEXIST|
OFN_HIDEREADONLY|
OFN_LONGNAMES, //フラグ
テキスト (*.TXT)|*.TXT|
ドキュメント (*.DOC)|*.DOC|
全てのファイル(*.*)|*.*||, //フィルタ
NULL //親ウィンドウ
);
// fd.m_ofn.lpstrInitialDir=(LPCSTR)C:\\temp; //初期ディレクトリ

if(fd.DoModal()==IDOK){
OpenDocumentFile(fd.GetPathName());
}
}


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました