IOleParentUndoUnit
COM公式ドキュメント
undo ユニットが子 undo ユニットを含むことを可能にします。
メソッド 5
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
新しい親 undo ユニットを開きます。これは含んでいるユニットの undo スタックの一部になります。
| pPUU | IOleParentUndoUnit* | 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 を返す必要がありますが、それ以外は何もしないでください。
指定された親 undo ユニットを閉じます。(IOleParentUndoUnit.Close)
| pPUU | IOleParentUndoUnit* | in | 閉じる、現在開いている親ユニットへの IOleParentUndoUnit ポインターです。 |
| fCommit | BOOL | in | ユニットを保持するか破棄するかを示します。TRUE の場合、ユニットはコレクション内に保持されます。FALSE の場合、ユニットは破棄されます。このパラメーターは、エラーまたはキャンセルが発生した場合に、クライアントが構築中の undo ユニットを破棄できるようにするために使用されます。 |
戻り値
このメソッドは成功時に S_OK を返します。その他に返される可能性のある値は以下のとおりです。
| 戻り値 | 説明 |
|---|---|
| 親 undo ユニットに開いている子がなく、正常に閉じられました。 | |
| pPUU が現在開いている親 undo ユニットと一致しない場合、このメソッドの実装は、親ユニットがブロックされていない限り、内部状態を変更せずに E_INVALIDARG を返す必要があります。 |
解説(Remarks)
親 undo ユニットは、このメソッドから S_FALSE を返したときに、自身が閉じられていることを認識します。その時点で、プライベートインターフェイスを介してデータを渡している可能性のある他のオブジェクトとの通信をすべて終了する必要があります。
呼び出し側への注意
エラーの戻り値は、致命的なエラー状態を示します。fCommit が TRUE の場合、親ユニットまたは 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 を返す必要があります。唯一の例外は、ユニットがブロックされている場合です。
単純な undo ユニットをコレクションに追加します。
| pUU | IOleUndoUnit* | in | 追加する undo ユニットへの IOleUndoUnit ポインターです。 |
戻り値
このメソッドは、指定されたユニットが正常に追加された場合、または親ユニットがブロックされていた場合に S_OK を返します。
解説(Remarks)
親 undo ユニットまたは undo マネージャーは、ブロックされていない限り、与えられたすべての undo ユニットを受け入れる必要があります。ブロックされている場合は、何もせず S_OK を返す必要があります。
指定されたユニットが、この undo ユニットまたはその子のいずれかの子であるかどうか、つまり指定されたユニットがこの親ユニット内の階層の一部であるかどうかを示します。
| pUU | IOleUndoUnit* | in | 検索する undo ユニットへの IOleUndoUnit ポインターです。 |
戻り値
解説(Remarks)
これは通常、破棄されるユニットが最上位ユニットではないというまれなケースで、undo マネージャーがその IOleUndoManager::DiscardFrom メソッドの実装内で呼び出します。親ユニットはまず自身のリストを調べ、次に IOleParentUndoUnit に対して IUnknown::QueryInterface を行うことで判断される、親ユニットでもある各子に処理を委譲する必要があります。
最も内側にある開いている親 undo ユニットに関する状態情報を取得します。(IOleParentUndoUnit.GetParentState)
| pdwState | DWORD* | out | 状態情報へのポインターです。この情報は UASFLAGS 列挙型から取得された値です。 |
戻り値
このメソッドは成功時に S_OK を返します。
解説(Remarks)
実装者への注意
ユニットに開いている子がある場合は、このメソッドをその子に委譲する必要があります。ない場合は、pdwState の値を適切に設定して戻る必要があります。親ユニットは、開いている子がある間は決してブロックされてはならないことに注意してください。これが起こると、子ユニットが閉じられなくなる可能性があり、深刻な問題を引き起こします。呼び出し側への注意
通常の状態を確認する際は、将来の互換性のために、このメソッドの pdwState パラメーターの未使用ビットをマスクするために UAS_MASK 値を使用してください。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 指定が可能。#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 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。