CDataRecoveryHandler クラス
CDataRecoveryHandler
は、アプリケーションが予期せず終了した場合にドキュメントを自動保存し、復元します。
構文
class CDataRecoveryHandler : public CObject
メンバー
コンストラクター
名前 | 説明 |
---|---|
CDataRecoveryHandler::CDataRecoveryHandler | CDataRecoveryHandler オブジェクトを構築します。 |
メソッド
データ メンバー
名前 | 説明 |
---|---|
m_bRestoringPreviousOpenDocs | データ回復ハンドラーが以前に開いているドキュメントを再度開くかどうかを示します。 |
m_bSaveDocumentInfoOnIdle | データ回復ハンドラーが次のアイドル ループでドキュメントを自動保存するかどうかを示します。 |
m_bShutdownByRestartManager | 再起動マネージャーによってアプリケーションが終了するかどうかを示します。 |
m_dwRestartManagerSupportFlags | 再起動マネージャーがアプリケーションに提供するサポートを示すフラグ。 |
m_lstAutosavesToDelete | 元のドキュメントが閉じられたときに削除されなかった自動保存されたファイルの一覧。 アプリケーションが終了すると、再起動マネージャーはファイルの削除を再試行します。 |
m_mapDocNameToAutosaveName | 自動保存されたファイル名へのドキュメント名のマップ。 |
m_mapDocNameToDocumentPtr | CDocument ポインターへのドキュメント名のマップ。 |
m_mapDocNameToRestoreBool | 自動保存されたドキュメントを復元するかどうかを示すブール型パラメーターへのドキュメント名のマップ。 |
m_mapDocumentPtrToDocName | ドキュメント名への CDocument ポインターのマップ。 |
m_mapDocumentPtrToDocTitle | ドキュメント タイトルへの CDocument ポインターのマップ。 これらのタイトルは、ファイルの保存に使用されます。 |
m_nAutosaveInterval | 自動保存の間の時間 (ミリ秒単位)。 |
m_nTimerID | 自動保存タイマーの識別子。 |
m_strAutosavePath | 自動保存されたドキュメントが格納される場所。 |
m_strRestartIdentifier | 再起動マネージャーの GUID の文字列表現。 |
解説
再起動マネージャーは、 CDataRecoveryHandler
クラスを使用して、開いているすべてのドキュメントを追跡し、必要に応じて自動保存します。 自動保存を有効にするには、 CDataRecoveryHandler::SetSaveDocumentInfoOnIdle メソッドを使用します。 このメソッドは、次のアイドル ループで自動保存を実行するように CDataRecoveryHandler
に指示します。 再起動マネージャーは、CDataRecoveryHandler
が自動保存を実行する必要があるときにSetSaveDocumentInfoOnIdle
を呼び出します。
CDataRecoveryHandler
クラスのすべてのメソッドは仮想です。 このクラスのメソッドをオーバーライドして、独自のカスタム データ回復ハンドラーを作成します。 独自のデータ回復ハンドラーまたは再起動マネージャーを作成しない限り、CDataRecoveryHandler をインスタンス化しないでください。 CWinApp クラスは、必要に応じてCDataRecoveryHandler
オブジェクトを作成します。
CDataRecoveryHandler
オブジェクトを使用する前に、CDataRecoveryHandler::Initialize を呼び出す必要があります。
CDataRecoveryHandler
クラスは再起動マネージャーに密接に接続されているため、CDataRecoveryHandler
はグローバル パラメーターのm_dwRestartManagerSupportFlags
によって異なります。 このパラメーターは、再起動マネージャーが持つアクセス許可とアプリケーションとの対話方法を決定します。 既存のアプリケーションに再起動マネージャーを組み込むには、メイン アプリケーションのコンストラクター m_dwRestartManagerSupportFlags
適切な値を割り当てる必要があります。 再起動マネージャーの使用方法の詳細については、「 方法: 再起動マネージャーのサポートを追加するを参照してください。
要件
Header: afxdatarecovery.h
CDataRecoveryHandler::AutosaveAllDocumentInfo
CDataRecoveryHandler
クラスに登録されている各ファイルを自動保存します。
virtual BOOL AutosaveAllDocumentInfo();
戻り値
CDataRecoveryHandler
がすべてのドキュメントを保存した場合は TRUE。ドキュメントが保存されていない場合は FALSE。
解説
保存する必要があるドキュメントがない場合、このメソッドは TRUE を返します。 また、アプリケーションの CWinApp
または CDocManager
を取得するとエラーが発生した場合は、ドキュメントを保存せずに TRUE が返されます。
このメソッドを使用するには、AFX_RESTART_MANAGER_AUTOSAVE_AT_RESTARTまたはAFX_RESTART_MANAGER_AUTOSAVE_AT_INTERVALを m_dwRestartManagerSupportFlags
で設定する必要があります。 詳細については、「 方法: 再起動マネージャーのサポートを追加する」を参照してください。
CDataRecoveryHandler::AutosaveDocumentInfo
指定したドキュメントを自動保存します。
virtual BOOL AutosaveDocumentInfo(
CDocument* pDocument,
BOOL bResetModifiedFlag = TRUE);
パラメーター
pDocument
[in]保存する CDocument
へのポインター。
bResetModifiedFlag
[in]TRUE は、 CDataRecoveryHandler
が pDocument を変更すると見なしていることを示します。FALSE は、フレームワークが pDocument が変更されていないと見なしていることを示します。 このフラグの効果の詳細については、「解説」セクションを参照してください。
戻り値
適切なフラグが設定され、 pDocument が有効な CDocument
オブジェクトである場合は TRUE。
解説
各 CDocument
オブジェクトには、前回の保存以降に変更されたかどうかを示すフラグがあります。 CDocument::IsModified を使用して、このフラグの状態を確認します。 前回の保存以降に CDocument
が変更されていない場合、 AutosaveDocumentInfo
は、そのドキュメントの自動保存されたファイルをすべて削除します。 前回の保存以降にドキュメントが変更された場合は、閉じる前にドキュメントを保存するようにユーザーに求められます。
Note
bResetModifiedFlagを使用してドキュメントの状態を変更しない場合、ユーザーが保存されていないデータを失う可能性があります。 フレームワークでドキュメントが変更されていないと見なされた場合、閉じてもユーザーに保存を求めるメッセージは表示されません。
このメソッドは、pDocument が有効なCDocument
オブジェクトでない場合に、ASSERT マクロで例外をスローします。
このメソッドを使用するには、AFX_RESTART_MANAGER_AUTOSAVE_AT_RESTARTまたはAFX_RESTARTMANAGER_AUTOSAVE_AT_INTERVALを m_dwRestartManagerSupportFlagsで設定する必要があります。
CDataRecoveryHandler::CDataRecoveryHandler
CDataRecoveryHandler
オブジェクトを構築します。
CDataRecoveryHandler(
DWORD dwRestartManagerSupportFlags,
int nAutosaveInterval);
パラメーター
dwRestartManagerSupportFlags
[in]サポートされている再起動マネージャーのオプションを示します。
nAutosaveInterval
[in]自動保存の間隔。 このパラメーターはミリ秒単位です。
解説
MFC フレームワークは、New Project ウィザードを使用すると、アプリケーションのCDataRecoveryHandler
オブジェクトを自動的に作成します。 データ回復動作または再起動マネージャーをカスタマイズする場合を除き、 CDataRecoveryHandler
オブジェクトを作成しないでください。
CDataRecoveryHandler::CreateDocumentInfo
開いているドキュメントの一覧にドキュメントを追加します。
virtual BOOL CreateDocumentInfo(CDocument* pDocument);
パラメーター
pDocument
[in] CDocument
へのポインター。 このメソッドは、この CDocument
のドキュメント情報を作成します。
戻り値
既定の実装では、TRUE が返されます。
解説
このメソッドは pDocument がドキュメントを追加する前にドキュメントの一覧に既に存在するかどうかを確認します。 pDocumentが既にリストに含まれている場合、このメソッドは、pDocumentに関連付けられている自動保存されたファイルを削除します。
このメソッドを使用するには、AFX_RESTART_MANAGER_AUTOSAVE_AT_RESTARTまたはAFX_RESTARTMANAGER_AUTOSAVE_AT_INTERVALを m_dwRestartManagerSupportFlagsで設定する必要があります。
CDataRecoveryHandler::D eleteAllAutosavedFiles
現在自動保存されているすべてのファイルを削除します。
virtual BOOL DeleteAllAutosavedFiles();
戻り値
既定の実装では常に TRUE が返されます。
CDataRecoveryHandler::D eleteAutosavedFile
指定した自動保存ファイルを削除します。
virtual BOOL DeleteAutosavedFile(const CString& strAutosavedFile);
パラメーター
strAutosavedFile
[in]自動保存されたファイル名を含む文字列。
戻り値
既定の実装では常に TRUE が返されます。
解説
このメソッドは、自動保存されたファイルを削除できない場合は、ファイルの名前を一覧に保存します。 CDataRecoveryHandler
のデストラクターは、その一覧で指定された自動保存された各ファイルの削除を試みます。
CDataRecoveryHandler::GenerateAutosaveFileName
指定されたドキュメント ファイル名に関連付けられている自動保存ファイルの名前を生成します。
virtual CString GenerateAutosaveFileName(const CString& strDocumentName) const;
パラメーター
strDocumentName
[in]ドキュメント名を含む文字列。 GenerateAutosaveFileName
は、このドキュメント名を使用して、対応する自動保存ファイル名を生成します。
戻り値
strDocumentName から生成された自動保存ファイル名。
解説
各ドキュメント名には、自動保存ファイル名を持つ 1 対 1 のマッピングがあります。
CDataRecoveryHandler::GetAutosaveInterval
自動保存の試行間隔を返します。
virtual int GetAutosaveInterval() const;
戻り値
自動保存が試行されるまでのミリ秒数。
CDataRecoveryHandler::GetAutosavePath
自動保存されたファイルのパスを返します。
virtual CString GetAutosavePath() const;
戻り値
自動保存されたドキュメントが格納される場所。
CDataRecoveryHandler::GetDocumentListName
CDocument
オブジェクトからドキュメント名を取得します。
virtual CString GetDocumentListName(CDocument* pDocument) const;
パラメーター
pDocument
[in] CDocument
へのポインター。 GetDocumentListName
は、この CDocument
からドキュメント名を取得します。
戻り値
pDocumentのドキュメント名。
解説
CDataRecoveryHandler
では、m_mapDocNameToAutosaveName、m_mapDocNameToDocumentPtr、およびm_mapDocNameToRestoreBoolのキーとしてドキュメント名が使用されます。 これらのパラメーターを使用すると、CDocument
オブジェクト、自動保存ファイル名、自動保存設定を監視するCDataRecoveryHandler
が有効になります。
CDataRecoveryHandler::GetNormalDocumentTitle
指定した文書の通常のタイトルを取得します。
virtual CString GetNormalDocumentTitle(CDocument* pDocument);
パラメーター
pDocument
[in] CDocument
へのポインター。
戻り値
指定した文書の通常のタイトル。
解説
通常、ドキュメントの通常のタイトルは、パスのないドキュメントのファイル名です。 これは、[名前を付けて保存] ダイアログ ボックスの [ ファイル名 フィールド タイトル 。
CDataRecoveryHandler::GetRecoveredDocumentTitle
復元されたドキュメントのタイトルを作成して返します。
virtual CString GetRecoveredDocumentTitle(const CString& strDocumentTitle) const;
パラメーター
strDocumentTitle
[in]ドキュメントの通常のタイトル。
戻り値
回復されたドキュメントのタイトル。
解説
既定では、ドキュメントの回復されたタイトルは通常のタイトルであり、 [recovered] 追加されます。 CDataRecoveryHandler
がユーザーにクエリを実行して自動保存されたドキュメントを復元すると、回復されたタイトルがユーザーに表示されます。
CDataRecoveryHandler::GetRestartIdentifier
アプリケーションの一意の再起動識別子を取得します。
virtual CString GetRestartIdentifier() const;
戻り値
一意の再起動識別子。
解説
再起動識別子は、アプリケーションの実行ごとに一意です。
CDataRecoveryHandler
は、現在開いているドキュメントに関する情報をレジストリに格納します。 再起動マネージャーは、アプリケーションを終了して再起動すると、再起動識別子を CDataRecoveryHandler
に提供します。 CDataRecoveryHandler
は、再起動識別子を使用して、以前に開いているドキュメントの一覧を取得します。 これにより、 CDataRecoveryHandler
は自動保存されたファイルを検索して復元しようとします。
CDataRecoveryHandler::GetSaveDocumentInfoOnIdle
CDataRecoveryHandler
が現在のアイドル ループで自動保存を実行するかどうかを示します。
virtual BOOL GetSaveDocumentInfoOnIdle() const;
戻り値
TRUE は、現在のアイドル ループで CDataRecoveryHandler
自動保存を示します。FALSE は、そうでない場合を示します。
CDataRecoveryHandler::GetShutdownByRestartManager
再起動マネージャーによってアプリケーションが終了したかどうかを示します。
virtual BOOL GetShutdownByRestartManager() const;
戻り値
TRUE は、再起動マネージャーによってアプリケーションが終了したことを示します。FALSE は、そうでないことを示します。
CDataRecoveryHandler::Initialize
CDataRecoveryHandler
を初期化します。
virtual BOOL Initialize();
戻り値
初期化が成功した場合は TRUE。それ以外の場合は FALSE。
解説
初期化プロセスは、レジストリから自動保存ファイルを格納するためのパスを読み込みます。 Initialize
メソッドでこのディレクトリが見つからない場合、またはパスが NULL の場合、Initialize
は失敗し、FALSE
が返されます。
CDataRecoveryHandler::SetAutosavePath を使用して、アプリケーションがCDataRecoveryHandler
を初期化した後で自動保存パスを変更します。
Initialize
メソッドは、次の自動保存が発生したときに監視するタイマーも開始します。 CDataRecoveryHandler::SetAutosaveInterval を使用して、アプリケーションがCDataRecoveryHandler
を初期化した後の自動保存間隔を変更します。
CDataRecoveryHandler::QueryRestoreAutosavedDocuments
CDataRecoveryHandler
が自動保存した各ドキュメントのダイアログ ボックスをユーザーに表示します。 ダイアログ ボックスは、ユーザーが自動保存されたドキュメントを復元するかどうかを決定します。
virtual void QueryRestoreAutosavedDocuments();
解説
アプリケーションが Unicode の場合、このメソッドはユーザーに CTaskDialog を表示します。 それ以外の場合、フレームワークは AfxMessageBox を使用してユーザーにクエリを実行します。
QueryRestoreAutosavedDocuments
は、ユーザーからのすべての応答を収集した後、メンバー変数m_mapDocNameToRestoreBoolに情報を格納します。 このメソッドは、自動保存されたドキュメントを復元しません。
CDataRecoveryHandler::ReadOpenDocumentList
開いているドキュメントの一覧をレジストリから読み込みます。
virtual BOOL ReadOpenDocumentList();
戻り値
TRUE ReadOpenDocumentList
レジストリから少なくとも 1 つのドキュメントの情報を読み込まれたことを示します。FALSE は、ドキュメント情報が読み込まれなかった場合を示します。
解説
この関数は、開いているドキュメント情報をレジストリから読み込み、 m_mapDocNameToAutosaveNameメンバー変数に格納します。
ReadOpenDocumentList
は、すべてのデータを読み込んだ後、レジストリからドキュメント情報を削除します。
CDataRecoveryHandler::RemoveDocumentInfo
指定したドキュメントを開いているドキュメント リストから削除します。
virtual BOOL RemoveDocumentInfo(CDocument* pDocument);
パラメーター
pDocument
[in]削除するドキュメントへのポインター。
戻り値
pDocumentがリストから削除された場合は TRUE。エラーが発生した場合は FALSE。
解説
ユーザーがドキュメントを閉じると、フレームワークはこのメソッドを使用して、開いているドキュメントの一覧からドキュメントを削除します。
RemoveDocumentInfo
開いているドキュメントの一覧pDocumentが見つからない場合は、何も実行せず、TRUE を返します。
このメソッドを使用するには、AFX_RESTART_MANAGER_REOPEN_PREVIOUS_FILESを m_dwRestartManagerSupportFlags で設定する必要があります。
CDataRecoveryHandler::ReopenPreviousDocuments
以前に開いたドキュメントを開きます。
virtual BOOL ReopenPreviousDocuments();
戻り値
少なくとも 1 つのドキュメントが開かれた場合は TRUE。それ以外の場合は FALSE。
解説
このメソッドは、以前に開いたドキュメントの最新の保存を開きます。 ドキュメントが保存または自動保存されていない場合、 ReopenPreviousDocuments
は、そのファイルの種類のテンプレートに基づいて空白のドキュメントを開きます。
このメソッドを使用するには、AFX_RESTART_MANAGER_REOPEN_PREVIOUS_FILESを m_dwRestartManagerSupportFlags で設定する必要があります。 このパラメーターが設定されていない場合、 ReopenPreviousDocuments
は何も実行せず、FALSE を返します。
以前に開いているドキュメントの一覧にドキュメントが格納されていない場合、 ReopenPreviousDocuments
は何も実行せず、FALSE を返します。
CDataRecoveryHandler::RestoreAutosavedDocuments
ユーザー入力に基づいて自動保存されたドキュメントを復元します。
virtual BOOL RestoreAutosavedDocuments();
戻り値
このメソッドがドキュメントを正常に復元する場合は TRUE。
解説
このメソッドは、 CDataRecoveryHandler::QueryRestoreAutosavedDocuments を呼び出して、ユーザーが復元するドキュメントを決定します。 ユーザーが自動保存されたドキュメントを復元しないことを決定した場合、 RestoreAutosavedDocuments
は自動保存ファイルを削除します。 それ以外の場合、 RestoreAutosavedDocuments
は、開いているドキュメントを自動保存されたバージョンに置き換えます。
このメソッドを使用するには、 m_dwRestartManagerSupportFlags
でAFX_RESTART_MANAGER_REOPEN_PREVIOUS_FILESまたはAFX_RESTART_MANAGER_RESTORE_AUTOSAVED_FILESを設定する必要があります。
CDataRecoveryHandler::SaveOpenDocumentList
開いているドキュメントの現在の一覧を Windows レジストリに保存します。
virtual BOOL SaveOpenDocumentList();
戻り値
保存する開いているドキュメントがない場合、または正常に保存された場合は TRUE。 レジストリに保存するドキュメントがあるが、エラーが発生したために保存されなかった場合は FALSE。
解説
再起動マネージャーは、アプリケーションが予期せず終了したとき、またはアップグレードのために終了したときに、 SaveOpenDocumentList
を呼び出します。 アプリケーションが再起動すると、 CDataRecoveryHandler::ReadOpenDocumentList を使用して開いているドキュメントの一覧が取得されます。
このメソッドは、開いているドキュメントの一覧のみを保存します。 メソッド CDataRecoveryHandler::AutosaveDocumentInfo は、ドキュメント自体を保存します。
CDataRecoveryHandler::SetAutosaveInterval
自動保存サイクル間の時間をミリ秒単位で設定します。
Virtual void SetAutosaveInterval(int nAutosaveInterval);
パラメーター
nAutosaveInterval
[in]新しい自動保存間隔 (ミリ秒)。
CDataRecoveryHandler::SetAutosavePath
自動保存されたファイルが格納されるディレクトリを設定します。
virtual void SetAutosavePath(const CString& strAutosavePath);
パラメーター
strAutosavePath
[in]自動保存ファイルが格納されるパス。
解説
自動保存ディレクトリを変更しても、現在自動保存されているファイルは移動されません。
CDataRecoveryHandler::SetRestartIdentifier
CDataRecoveryHandler
のこのインスタンスの一意の再起動識別子を設定します。
virtual void SetRestartIdentifier(const CString& strRestartIdentifier);
パラメーター
strRestartIdentifier
[in]再起動マネージャーの一意の識別子。
解説
再起動マネージャーは、開いているドキュメントに関する情報をレジストリに記録します。 この情報は、キーとして一意の再起動識別子と共に格納されます。 再起動識別子はアプリケーションのインスタンスごとに一意であるため、アプリケーションの複数のインスタンスが予期せず終了し、再起動マネージャーが各インスタンスを復旧できます。
CDataRecoveryHandler::SetSaveDocumentInfoOnIdle
CDataRecoveryHandler
が現在のアイドル サイクル中に開いているドキュメント情報を Windows レジストリに保存するかどうかを設定します。
virtual void SetSaveDocumentInfoOnIdle(BOOL bSaveOnIdle);
パラメーター
bSaveOnIdle
[in]現在のアイドル サイクル中にドキュメント情報を保存する場合は TRUE。保存を実行しない場合は FALSE。
CDataRecoveryHandler::SetShutdownByRestartManager
アプリケーションの前回の終了が再起動マネージャーによって発生したかどうかを設定します。
virtual void SetShutdownByRestartManager(BOOL bShutdownByRestartManager);
パラメーター
bShutdownByRestartManager
[in]再起動マネージャーによってアプリケーションが終了したことを示す場合は TRUE。別の理由でアプリケーションが終了したことを示す場合は FALSE。
解説
フレームワークの動作は、前の出口が予期しないものかどうか、または再起動マネージャーによって開始されたかどうかによって異なります。
CDataRecoveryHandler::UpdateDocumentInfo
ユーザーがドキュメントを保存したため、ドキュメントの情報を更新します。
virtual BOOL UpdateDocumentInfo(CDocument* pDocument);
パラメーター
pDocument
[in]保存されたドキュメントへのポインター。
戻り値
このメソッドが自動保存されたドキュメントを削除し、ドキュメント情報を更新した場合は TRUE。エラーが発生した場合は FALSE。
解説
ユーザーがドキュメントを保存すると、自動保存されたファイルは不要になるため、アプリケーションによって削除されます。 UpdateDocumentInfo
は、 CDataRecoveryHandler::RemoveDocumentInfo を呼び出して、自動保存されたファイルを削除します。 UpdateDocumentInfo
その後、 pDocument から現在開いているドキュメントの一覧に情報を追加します。これは、 RemoveDocumentInfo
はその情報を削除しますが、保存されたドキュメントはまだ開いているためです。
このメソッドを使用するには、AFX_RESTART_MANAGER_REOPEN_PREVIOUS_FILESを m_dwRestartManagerSupportFlags で設定する必要があります。