Win32 API 日本語リファレンス
ホームSystem.Ole › IOleParentUndoUnit

IOleParentUndoUnit

COM
IIDa1faf330-ef97-11ce-9bc9-00aa00608e01継承元IOleUndoUnit自前メソッド開始 vtbl7

公式ドキュメント

undo ユニットが子 undo ユニットを含むことを可能にします。

メソッド 5

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 7 HRESULT Open(IOleParentUndoUnit* pPUU)

新しい親 undo ユニットを開きます。これは含んでいるユニットの undo スタックの一部になります。

pPUUIOleParentUndoUnit*in開く親 undo ユニットへの IOleParentUndoUnit ポインターです。

戻り値

このメソッドは、親 undo ユニットが正常に開かれた場合、または現在ブロックされている場合に S_OK を返します。

解説(Remarks)

指定された親ユニットが作成され、開いたままになります。次に undo マネージャーは、この親ユニットに新しいユニットを追加するために、この親ユニットの IOleParentUndoUnit::Add または IOleParentUndoUnit::Open メソッドを呼び出します。この親ユニットは、その IOleParentUndoUnit::Close メソッドが呼び出されるまで、追加の undo ユニットを受け取ります。

pPUU で指定された親ユニットは、その IOleParentUndoUnit::Close メソッドが fCommit パラメーターを TRUE に設定して呼び出されるまで、undo スタックに追加されません。

親 undo ユニットまたは undo マネージャーは、ブロックされていない限り、与えられたすべての undo ユニットを含める必要があります。ブロックされている場合は、S_OK を返す必要がありますが、それ以外は何もしないでください。

vtbl 8 HRESULT Close(IOleParentUndoUnit* pPUU, BOOL fCommit)

指定された親 undo ユニットを閉じます。(IOleParentUndoUnit.Close)

pPUUIOleParentUndoUnit*in閉じる、現在開いている親ユニットへの IOleParentUndoUnit ポインターです。
fCommitBOOLinユニットを保持するか破棄するかを示します。TRUE の場合、ユニットはコレクション内に保持されます。FALSE の場合、ユニットは破棄されます。このパラメーターは、エラーまたはキャンセルが発生した場合に、クライアントが構築中の undo ユニットを破棄できるようにするために使用されます。

戻り値

このメソッドは成功時に S_OK を返します。その他に返される可能性のある値は以下のとおりです。

戻り値 説明
S_FALSE
親 undo ユニットに開いている子がなく、正常に閉じられました。
E_INVALIDARG
pPUU が現在開いている親 undo ユニットと一致しない場合、このメソッドの実装は、親ユニットがブロックされていない限り、内部状態を変更せずに E_INVALIDARG を返す必要があります。

解説(Remarks)

親 undo ユニットは、このメソッドから S_FALSE を返したときに、自身が閉じられていることを認識します。その時点で、プライベートインターフェイスを介してデータを渡している可能性のある他のオブジェクトとの通信をすべて終了する必要があります。

呼び出し側への注意

エラーの戻り値は、致命的なエラー状態を示します。

fCommitTRUE の場合、親ユニットまたは undo マネージャーは undo ユニットを受け入れる必要があります。

実装者への注意

閉じる要求を処理するために、親 undo ユニットはまず開いている子ユニットがあるかどうかを確認します。ない場合は S_FALSE を返します。

開いている子ユニットがある場合は、その子に対して IOleParentUndoUnit::Close メソッドを呼び出します。子が S_FALSE を返した場合、親 undo ユニットは pPUU がその子ユニットを指していることを確認し、その子 undo ユニットを閉じます。子が S_OK を返した場合は、子が内部で閉じる処理を行ったため、その親は何もするべきではありません。

親ユニットがブロックされている場合は、pPUU パラメーターを確認して適切な戻り値を判断する必要があります。pPUU が自身を指している場合は、S_FALSE を返す必要があります。

それ以外の場合は、S_OK を返す必要があります。fCommit パラメーターは無視され、何のアクションも実行されません。

pPUU が現在開いている親 undo ユニットと一致しない場合、このメソッドの実装は内部状態を変更せずに E_INVALIDARG を返す必要があります。唯一の例外は、ユニットがブロックされている場合です。

vtbl 9 HRESULT Add(IOleUndoUnit* pUU)

単純な undo ユニットをコレクションに追加します。

pUUIOleUndoUnit*in追加する undo ユニットへの IOleUndoUnit ポインターです。

戻り値

このメソッドは、指定されたユニットが正常に追加された場合、または親ユニットがブロックされていた場合に S_OK を返します。

解説(Remarks)

親 undo ユニットまたは undo マネージャーは、ブロックされていない限り、与えられたすべての undo ユニットを受け入れる必要があります。ブロックされている場合は、何もせず S_OK を返す必要があります。

vtbl 10 HRESULT FindUnit(IOleUndoUnit* pUU)

指定されたユニットが、この undo ユニットまたはその子のいずれかの子であるかどうか、つまり指定されたユニットがこの親ユニット内の階層の一部であるかどうかを示します。

pUUIOleUndoUnit*in検索する undo ユニットへの IOleUndoUnit ポインターです。

戻り値

このメソッドは、指定された undo ユニットがこの親に従属する階層内にある場合に S_OK を返し、そうでない場合は S_FALSE を返します。

解説(Remarks)

これは通常、破棄されるユニットが最上位ユニットではないというまれなケースで、undo マネージャーがその IOleUndoManager::DiscardFrom メソッドの実装内で呼び出します。親ユニットはまず自身のリストを調べ、次に IOleParentUndoUnit に対して IUnknown::QueryInterface を行うことで判断される、親ユニットでもある各子に処理を委譲する必要があります。

vtbl 11 HRESULT GetParentState(DWORD* pdwState)

最も内側にある開いている親 undo ユニットに関する状態情報を取得します。(IOleParentUndoUnit.GetParentState)

pdwStateDWORD*out状態情報へのポインターです。この情報は UASFLAGS 列挙型から取得された値です。

戻り値

このメソッドは成功時に S_OK を返します。

解説(Remarks)

実装者への注意

ユニットに開いている子がある場合は、このメソッドをその子に委譲する必要があります。ない場合は、pdwState の値を適切に設定して戻る必要があります。親ユニットは、開いている子がある間は決してブロックされてはならないことに注意してください。これが起こると、子ユニットが閉じられなくなる可能性があり、深刻な問題を引き起こします。

呼び出し側への注意

通常の状態を確認する際は、将来の互換性のために、このメソッドの pdwState パラメーターの未使用ビットをマスクするために UAS_MASK 値を使用してください。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IOleParentUndoUnit "{A1FAF330-EF97-11CE-9BC9-00AA00608E01}"
#usecom global IOleParentUndoUnit IID_IOleParentUndoUnit "{}"
#comfunc global IOleParentUndoUnit_Open            7 sptr
#comfunc global IOleParentUndoUnit_Close           8 sptr,int
#comfunc global IOleParentUndoUnit_Add             9 sptr
#comfunc global IOleParentUndoUnit_FindUnit        10 sptr
#comfunc global IOleParentUndoUnit_GetParentState  11 var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。