CDocument::OnOpenDocument
更新 : 2007 年 11 月
[ファイル] メニューの [開く] コマンドの一部としてフレームワークが呼び出します。
virtual BOOL OnOpenDocument(
LPCTSTR lpszPathName
);
パラメータ
- lpszPathName
開かれるドキュメントのパスへのポインタ。
戻り値
ドキュメントの読み込みが成功した場合は 0 以外を返します。それ以外の場合は 0 を返します。
解説
この関数の既定の実装では、指定のファイルを開き、ドキュメントを空にするために DeleteContents メンバ関数を呼び出し、ファイルの内容を読み込むために CObject::Serialize を呼び出します。その後、ドキュメントを変更なしとしてマークします。ほかのアーカイブ機構やファイル機構を使う場合は、この関数をオーバーライドします。たとえば、ドキュメントが分割されたファイルではなく、データベースのレコードであるアプリケーションを記述するときなどです。
SDI アプリケーションでは、[ファイル] メニューの [開く] をクリックすると、フレームワークは、新しいドキュメントを作成せずに既存の CDocument オブジェクトを再初期化するためにこの関数を使います。MDI アプリケーションでは、[ファイル] メニューの [開く] をクリックすると、フレームワークは、新しい CDocument オブジェクトを構築し、その後それを初期化するために、この関数を呼び出します。SDI アプリケーションでは、[ファイル] メニューの [開く] コマンドに対応する初期化コードは、コンストラクタではなく、この関数の中に置く必要があります。
使用例
ドキュメント オブジェクトを初期化するための代替メソッドの例を次に示します。
// Method 1: In an MDI application, the simplest place to do
// initialization is in the document constructor. The framework
// always creates a new document object for File New or File Open.
CExampleDoc::CExampleDoc()
{
// Do initialization of MDI document here.
}
// Method 2: In an SDI or MDI application, do all initialization
// in an override of OnNewDocument, if you are certain that
// the initialization is effectively saved upon File Save
// and fully restored upon File Open, via serialization.
BOOL CMyDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// Do initialization of new document here.
return TRUE;
}
// Method 3: If the initialization of your document is not
// effectively saved and restored by serialization (during File Save
// and File Open), then implement the initialization in single
// function (named InitMyDocument in this example). Call the
// shared initialization function from overrides of both
// OnNewDocument and OnOpenDocument.
BOOL CExampleDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
InitMyDocument(); // call your shared initialization function
// If your new document object requires additional initialization
// not necessary when the document is deserialized via File Open,
// then perform that additional initialization here.
return TRUE;
}
// Additional example of OnOpenDocument()
BOOL CExampleDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (!CDocument::OnOpenDocument(lpszPathName))
return FALSE;
InitMyDocument(); // call your shared initialization function
return TRUE;
}
必要条件
ヘッダー : afxwin.h
参照
参照
CDocument::ReportSaveLoadException