次の方法で共有


IOleParentUndoUnit インターフェイス (ocidl.h)

元に戻す単位を有効にして、子の元に戻す単位を含める。 たとえば、複数の個別のアクションが関係している場合でも、複雑なアクションを単一の元に戻す操作としてエンド ユーザーに表示できます。 下位のすべての元に戻す操作は、最上位の親元に戻す単位に含まれます。

親の元に戻す単位は、最初に IOleUndoManager::Open メソッドを使用して作成されます。 元に戻す単位の追加は、常に元に戻すマネージャーを使用して行う必要があります。 親ユニットの IOleParentUndoUnit::Open メソッドと IOleParentUndoUnit::Close メソッドは、元に戻すマネージャーによって呼び出されます。 元に戻すマネージャーに親ユニットをコールバックすると、無限の再帰が発生します。

親ユニットが開いている間、元に戻すマネージャーは IOleParentUndoUnit::Add を呼び出して元に戻す単位を追加します。 元に戻すマネージャーが最上位の親を閉じると、元に戻す単位全体とその入れ子になった下位が元に戻すスタックの上に配置されます。

有効にする親は、他の元に戻す単位を追加する前に、スタック上で開く必要があります。 開いていない場合は、代わりにスタックをクリアする必要があります。 これは、元に戻す単位がユーザー操作の結果としてのみ追加され、プログラムによる操作では追加されないようにするためです。 たとえば、アプリケーションで特定のボタンのクリックを元に戻し可能にしたいが、その同じアクションがオブジェクト モデルを通じて公開されている場合などです。 ユーザーのスクリプト コードの状態を復元できないため、そのアクションはユーザー インターフェイスを通じて元に戻すことができますが、オブジェクト モデルでは元に戻すことはできません。 どちらの場合も同じコードによって変更が実装されるため、ボタンクリックを処理する UI コードでは、スタック上で有効な親を開き、適切なコードを呼び出して、親ユニットを閉じる必要があります。 オブジェクト モデル コードでは親ユニットが開かないため、元に戻すスタックがクリアされます。

ブロックしている親は、スタックに元に戻す単位を追加しようとする可能性がある他のコードをコードが呼び出さない場合に使用されます。 たとえば、元に戻す単位を作成するコードを呼び出す場合は、ブロックしている親を使用する必要があります。このコードは、必要なすべての動作を完全に元に戻す外側のコードが既に作成されています。

非有効化の親は、ユーザーアクションに応答してイベントを発生させるときに使用されます。 スタックは、イベント ハンドラーが元に戻す単位を作成しようとした場合にのみクリアされますが、ハンドラーが存在しない場合は、元に戻すスタックが保持されます。

オブジェクトが親ユニットを作成する必要がある場合は、いくつかのケースを考慮する必要があります。

  • 有効化する親ユニットを作成するために、オブジェクトは元に戻すマネージャーで IOleUndoManager::GetOpenParentState を呼び出し、戻り値を確認します。 値がS_FALSE場合、オブジェクトは有効化する親を作成して開きます。 戻り値がS_OK場合は、親が既に開いています。 開いている親がブロックされている (ビット セットUAS_BLOCKED)、または有効になっている親 (UAS_BLOCKEDビットとUAS_NOPARENTENABLE ビットが設定されていない) 場合は、有効にする親を作成する必要はありません。 現在開いている親が無効になっている親 (ビット セットUAS_NOPARENTENABLE) の場合は、元に戻す単位の追加を再度有効にするために、有効にする親を作成して開く必要があります。 UAS_NORMALの値は 0 であるため、他のすべてのビットが存在せず、設定できるビット フラグではないことに注意してください。 *pdwState をUAS_NORMALと比較する場合は、 pdwState から未使用のビットをUAS_MASKでマスクして、将来の拡張を可能にします。
  • ブロックされた親を作成するために、オブジェクトは IOleUndoManager::GetOpenParentState を 呼び出し、既にブロックされている開いている親を確認します。 存在する場合は、新しいブロック親を作成する必要はありません。 それ以外の場合、オブジェクトはそれを作成し、スタック上で開きます。
  • 無効になっている親を作成するために、オブジェクトは IOleUndoManager::GetOpenParentState を 呼び出し、ブロックまたは無効化されている開いている親を確認します。 どちらか一方が存在する場合は、新しい親を作成する必要はありません。 それ以外の場合、オブジェクトは親を作成し、スタック上で開きます。
UAS_NOPARENTENABLEフラグとUAS_BLOCKEDフラグの両方が設定されている場合は、呼び出し元に最も関連するフラグをUAS_NOPARENTENABLE優先して使用する必要があります。 たとえば、オブジェクトが単純な元に戻す単位を作成している場合は、UAS_NOPARENTENABLE フラグに注意を払い、元に戻すスタックをクリアする必要があります。 有効にする親ユニットを作成する場合は、UAS_BLOCKED フラグに注意を払い、作成をスキップする必要があります。

親の元に戻す単位がブロック済みとしてマークされると、受け取った元に戻す単位は破棄されます。

継承

IOleParentUndoUnit インターフェイスは、IOleUndoUnit から継承します。 IOleParentUndoUnit には、次の種類のメンバーもあります。

メソッド

IOleParentUndoUnit インターフェイスには、これらのメソッドがあります。

 
IOleParentUndoUnit::Add

単純な元に戻す単位をコレクションに追加します。
IOleParentUndoUnit::Close

指定した親元に戻す単位を閉じます。 (IOleParentUndoUnit.Close)
IOleParentUndoUnit::FindUnit

指定した単位がこの元に戻す単位の子であるか、その子の 1 つであるかを示します。つまり、指定した単位がこの親ユニットの階層の一部である場合です。
IOleParentUndoUnit::GetParentState

最も内側の開いている親の元に戻す単位に関する状態情報を取得します。 (IOleParentUndoUnit.GetParentState)
IOleParentUndoUnit::Open

親の元に戻す新しい単位を開きます。これは、含むユニットの元に戻すスタックの一部になります。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー ocidl.h

こちらもご覧ください

IOleUndoManager

IOleUndoUnit