IOleUndoManager
COM公式ドキュメント
IOleUndoManager インターフェイスは、コンテナーが、含まれるコントロール内で発生したアクションに対する複数レベルの元に戻す (undo) 操作およびやり直し (redo) 操作を実装できるようにします。
解説(Remarks)
コントロールは、IOleUndoUnit インターフェイスを使用して元に戻す単位 (undo unit) を作成するか、IOleUndoUnit から派生した IOleParentUndoUnit インターフェイスを使用して親の元に戻す単位 (parent undo unit) を作成する必要があります。これら両方のインターフェイスは元に戻すアクションを実行し、親の元に戻す単位はさらに、入れ子になった元に戻す単位を格納できます。
元に戻すマネージャー (undo manager) は、集中管理された元に戻すおよびやり直しサービスを提供します。これは、元に戻すスタックとやり直しスタック上の親の元に戻す単位と単純な元に戻す単位を管理します。オブジェクトは、UI アクティブであるかどうかにかかわらず、元に戻すマネージャーのメソッドを呼び出すことによって、これらのスタックに元に戻す単位を配置できます。
これにより、集中管理された元に戻すマネージャーは、ホストアプリケーションの元に戻すおよびやり直しのユーザーインターフェイスをサポートするために必要なデータを保持し、スタックがいっぱいになるにつれて元に戻す情報を段階的に破棄できます。
元に戻すマネージャーはサービスとして実装され、オブジェクトは IServiceProvider インターフェイスから IOleUndoManger へのポインターを取得します。これは通常、コンテナーによって実装されます。このサービスは、元に戻すスタックとやり直しスタックの 2 つのスタックを管理し、それぞれには、埋め込みオブジェクトまたはコンテナーアプリケーション自身によって生成された元に戻す単位が格納されます。
元に戻す単位は通常、エンドユーザーが実行したアクションに応じて生成されます。オブジェクトは、プログラムによるイベントに対しては元に戻すアクションを生成しません。実際、プログラムによるイベントは、スタック上の元に戻す単位が想定している前提を無効にする可能性があるため、元に戻すスタックをクリアする必要があります。
オブジェクトの状態が変化すると、オブジェクトはその変化を元に戻すために必要なすべての情報をカプセル化した元に戻す単位を作成します。オブジェクトは、元に戻すマネージャーのメソッドを呼び出して、元に戻す単位をスタック上に配置します。その後、エンドユーザーが元に戻す操作を選択すると、元に戻すマネージャーはスタックの一番上の元に戻す単位を取り出し、その IOleUndoUnit::Do メソッドを呼び出してそのアクションを実行し、その後それを解放します。エンドユーザーがやり直し操作を選択すると、元に戻すマネージャーはやり直しスタックの一番上のやり直し単位を取り出し、その IOleUndoUnit::Do メソッドを呼び出してそのアクションを実行し、その後それを解放します。
元に戻すマネージャーには、基本状態 (base state)、元に戻す状態 (undo state)、やり直し状態 (redo state) の 3 つの状態があります。基本状態で開始します。元に戻すスタックからアクションを実行するには、自身を元に戻す状態にし、元に戻す単位に対して IOleUndoUnit::Do を呼び出し、基本状態に戻ります。やり直しスタックからアクションを実行するには、自身をやり直し状態にし、元に戻す単位に対して IOleUndoUnit::Do を呼び出し、基本状態に戻ります。
元に戻すマネージャーは、基本状態にあるときに新しい元に戻す単位を受け取ると、その単位を元に戻すスタックに配置し、やり直しスタック全体を破棄します。元に戻す状態にあるときは、受け取った単位をやり直しスタックに配置します。やり直し状態にあるときは、やり直しスタックをフラッシュせずに、それらを元に戻すスタックに配置します。
元に戻すマネージャーはまた、いずれかのスタック内の任意のオブジェクトを起点として、元に戻すスタックまたはやり直しスタックを破棄することもオブジェクトに許可します。
ホストアプリケーションが、元に戻すマネージャーのスコープを決定します。たとえば、あるアプリケーションでは、スコープはドキュメントレベルにあり、ドキュメントごとに個別の元に戻すマネージャーが保持され、元に戻す操作はドキュメントごとに独立して管理されます。しかし、別のアプリケーションでは、アプリケーション全体に対して 1 つの元に戻すマネージャー、したがって 1 つの元に戻すスコープを保持する場合もあります。
エラー処理
元に戻す操作が失敗してドキュメントが不安定な状態のまま残されることは、元に戻すマネージャー、元に戻す単位、およびアプリケーション自身がすべて協力して回避しなければならない事態です。その結果、元に戻す単位、元に戻すマネージャー、および元に戻す機能を使用するアプリケーションまたはコンポーネントが準拠しなければならない特定の要件があります。
元に戻すを実行するために、元に戻すマネージャーは 1 つ以上の元に戻す単位に対して IOleUndoUnit::Do を呼び出します。これらの単位は、さらに多くの単位を含むことができます。階層内のどこかの単位が失敗すると、そのエラーは最終的に元に戻すマネージャーに到達します。元に戻すマネージャーは、最後のトップレベル単位を呼び出す前のドキュメントの状態にロールバックを試みる責任を負います。元に戻すマネージャーは、元に戻しの試行中にやり直しスタックに追加された単位に対して IOleUndoUnit::Do を呼び出すことでロールバックを実行します。ロールバックも失敗した場合、元に戻すマネージャーはすべてを放棄してアプリケーションに戻らざるを得ません。元に戻すマネージャーはロールバックが成功したかどうかを示し、アプリケーションはこれに基づいて、コンポーネントを既知の状態にするために再初期化するなど、さまざまなアクションを取ることができます。
元に戻す単位をスタックに追加するすべてのステップは、アトミックに実行される必要があります。つまり、すべてのステップが成功するか、いずれも成功しないかのどちらかでなければなりません。
元に戻すマネージャーを提供するホストアプリケーションが、元に戻しが失敗したときに取るアクションを決定します。少なくとも、失敗をユーザーに通知する必要があります。ホストアプリケーションは、元に戻しが成功したかどうか、および試行されたロールバックが成功したかどうかを、元に戻すマネージャーから通知されます。元に戻しとロールバックの両方が失敗した場合、ホストアプリケーションは、アプリケーションを直ちにシャットダウンするなど、いくつかのオプションをユーザーに提示できます。
単純な元に戻す単位は、失敗を返す場合、いかなるオブジェクトの状態も変更してはなりません。これには、やり直しを実行する場合のやり直しスタックまたは元に戻すスタックの状態も含まれます。また、成功した場合には、対応する単位をやり直しスタックまたは元に戻すスタックに配置することも要求されます。単位が呼び出される前と後で、アプリケーションは安定していなければなりません。
親の元に戻す単位は、1 つの例外を除いて、単純な単位と同じ要件を持ちます。別の子が失敗する前に 1 つ以上の子が成功した場合、親単位は、対応する単位をやり直しスタックにコミットし、その失敗を自身の親に返さなければなりません。どの子も成功しなかった場合、親単位は、ロールバックが必要な状態変更を行った場合にのみ、そのやり直し単位をコミットする必要があります。たとえば、親単位が 3 つの単純な単位を含むとします。最初の 2 つは成功してやり直しスタックに単位を追加しましたが、3 つ目は失敗しました。この時点で、親単位はそのやり直し単位をコミットし、その失敗を返します。
副次的な影響として、親単位は、その子の成功に依存する状態変更を決して行ってはなりません。これを行うと、ロールバック動作が破綻します。親単位が状態変更を行う場合は、子を呼び出す前に行う必要があります。そして、状態変更が失敗した場合、そのやり直し単位をコミットしてはならず、いかなる子も呼び出してはならず、その失敗を自身の親に返す必要があります。
元に戻すマネージャーには、エラー処理に関する 1 つの主要な要件があります。それは、元に戻しまたはやり直しが失敗したときにロールバックを試みることです。
非準拠オブジェクト
複数レベルの元に戻しをサポートしないオブジェクトは、グローバルな元に戻すサービスに深刻な問題を引き起こす可能性があります。そのオブジェクトが元に戻すマネージャーを適切に更新することを当てにできないため、他のオブジェクトによって送信された単位も、非準拠オブジェクトの状態に依存している可能性があるため、疑わしいものとなります。準拠オブジェクトの単位を元に戻そうとしても、非準拠オブジェクトの状態が一致しないため、成功しない可能性があります。
複数レベルの元に戻しをサポートしないオブジェクトを検出するには、OLEMISC_SUPPORTSMULTILEVELUNDO 値を確認します。グローバルな元に戻すサービスに参加できるオブジェクトは、この値を設定します。
この値を持たないオブジェクトがユーザーに表示される元に戻すコンテキストに追加された場合、最善の方法は、このコンテキストの元に戻すユーザーインターフェイスを無効にすることです。あるいは、新しいオブジェクトの非準拠を回避して部分的な元に戻しサポートの提供を試みるかどうかをユーザーに尋ねるダイアログを提示することもできます。
さらに、非準拠オブジェクトは入れ子になったコンテナーに追加される場合があります。この場合、入れ子になったコンテナーは、IOleUndoManager::Enable を FALSE で呼び出すことによって、元に戻しを安全にサポートできなくなったことを元に戻すマネージャーに通知する必要があります。
メソッド 12
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
新しい親の元に戻す単位を開きます。この単位は、それを含む単位の元に戻すスタックの一部になります。
| pPUU | IOleParentUndoUnit* | in | 開く親の元に戻す単位への IOleParentUndoUnit ポインター。 |
戻り値
このメソッドは、親の元に戻す単位が正常に開かれた場合、または現在開いている単位がブロックされている場合に S_OK を返します。元に戻すマネージャーが現在無効になっている場合は、S_OK を返し、それ以外は何も行いません。
解説(Remarks)
このメソッドは IOleParentUndoUnit::Open と同じように実装されます。指定された親単位が作成され、開いたままになります。その後、元に戻すマネージャーはこの親単位に対して IOleUndoManager::Add または IOleUndoManager::Open メソッドを呼び出して、新しい単位を追加します。この親単位は、その IOleUndoManager::Close メソッドが呼び出されるまで、追加のすべての元に戻す単位を受け取ります。
pPUU によって指定された親単位は、その IOleUndoManager::Close メソッドが fCommit パラメーターを TRUE に設定して呼び出されるまで、元に戻すスタックに追加されません。
親の元に戻す単位または元に戻すマネージャーは、ブロックされていない限り、与えられたすべての元に戻す単位を格納しなければなりません。ブロックされている場合は、S_OK を返さなければなりませんが、それ以外は何も行わないようにする必要があります。
指定された親の元に戻す単位を閉じます。(IOleUndoManager.Close)
| pPUU | IOleParentUndoUnit* | in | 閉じる、現在開いている親単位の IOleParentUndoUnit インターフェイスへのポインター。 |
| fCommit | BOOL | in | 単位を保持するか破棄するかを示します。TRUE の場合、単位はコレクション内に保持されます。FALSE の場合、単位は破棄されます。このパラメーターは、エラーまたはキャンセルが発生した場合に、構築中の元に戻す単位をクライアントが破棄できるようにするために使用されます。 |
戻り値
このメソッドは、元に戻すマネージャーに開いている親の元に戻す単位があり、それが正常に閉じられた場合に S_OK を返します。元に戻すマネージャーが無効になっている場合は、直ちに S_OK を返し、それ以外は何も行わないようにする必要があります。その他の可能な戻り値には次のものがあります。
| 戻り値 | 説明 |
|---|---|
| 親の元に戻す単位に開いている子がなく、正常に閉じられました。 | |
| pPUU が現在開いている親の元に戻す単位と一致しない場合、このメソッドの実装は、親単位がブロックされていない限り、内部状態を変更せずに E_INVALIDARG を返す必要があります。 |
解説(Remarks)
このメソッドは IOleParentUndoUnit::Close と同じように実装されます。親の元に戻す単位は、このメソッドから S_FALSE を返すときに、自身が閉じられようとしていることを認識します。その時点で、プライベートインターフェイスを介してデータを提供している可能性のある他のオブジェクトとの通信をすべて終了する必要があります。
呼び出し側への注意
エラーの返却は、致命的なエラー状態を示します。fCommit が TRUE の場合、親単位または元に戻すマネージャーは元に戻す単位を受け入れなければなりません。
実装者への注意
閉じる要求を処理するために、親の元に戻す単位はまず、開いている子単位があるかどうかを確認します。ない場合は、S_FALSE を返します。開いている子単位がある場合は、その子に対して IOleUndoManager::Close メソッドを呼び出します。子が S_FALSE を返した場合、親の元に戻す単位は pPUU がその子単位を指していることを確認し、その子の元に戻す単位を閉じます。子が S_OK を返した場合は、子が内部で閉じる処理を行ったことを意味し、その親は何も行わないようにする必要があります。
親単位がブロックされている場合は、pPUU パラメーターを確認して適切な戻り値を判断する必要があります。pPUU が自身を指している場合は、S_FALSE を返す必要があります。
それ以外の場合は、S_OK を返す必要があり、fCommit パラメーターは無視され、いかなるアクションも実行されません。
pPUU が現在開いている親の元に戻す単位と一致しない場合、このメソッドの実装は、内部状態を変更せずに E_INVALIDARG を返す必要があります。これに対する唯一の例外は、単位がブロックされている場合です。
単純な元に戻す単位をコレクションに追加します。親の元に戻す単位が開いている間、元に戻すマネージャーは IOleParentUndoUnit::Add を呼び出すことで元に戻す単位をそこに追加します。
| pUU | IOleUndoUnit* | in | 追加する元に戻す単位への IOleUndoUnit ポインター。 |
戻り値
このメソッドは、指定された単位が正常に追加された場合、親単位がブロックされていた場合、または元に戻すマネージャーが無効になっている場合に S_OK を返します。
解説(Remarks)
このメソッドは IOleParentUndoUnit::Add と同じように実装されます。親の元に戻す単位または元に戻すマネージャーは、ブロックされていない限り、与えられたすべての元に戻す単位を受け入れなければなりません。ブロックされている場合は、何も行わずに S_OK を返す必要があります。
実装者への注意
元に戻すマネージャーが基本状態にある場合は、新しい単位を元に戻すスタックに配置し、やり直しスタック全体を破棄する必要があります。元に戻すマネージャーが元に戻す状態にある場合は、新しい単位をやり直しスタックに配置する必要があります。元に戻すマネージャーがやり直し状態にある場合は、やり直しスタックに影響を与えずに単位を元に戻すスタックに配置する必要があります。最も内側の開いている親の元に戻す単位に関する状態情報を取得します。(IOleUndoManager.GetOpenParentState)
| pdwState | DWORD* | out | 状態情報を受け取る変数へのポインター。この情報は、UASFLAGS 列挙型から取得された値です。 |
戻り値
解説(Remarks)
呼び出し側への注意
通常の状態を確認する場合は、将来の互換性のために、UAS_MASK 値を使用して、このメソッドの pdwState パラメーター内の未使用のビットをマスクしてください。実装者への注意
開いている親単位がある場合、このメソッドは IOleParentUndoUnit::GetParentState を呼び出します。元に戻すマネージャーが無効になっている場合は、pdwState パラメーターを UAS_BLOCKED で埋め、S_OK を返す必要があります。
指定された元に戻す単位と、元に戻すスタックまたはやり直しスタック上でそれより下にあるすべての元に戻す単位を破棄するように、元に戻すマネージャーに指示します。
| pUU | IOleUndoUnit* | in | 破棄する元に戻す単位への IOleUndoUnit ポインター。このパラメーターを NULL にすると、元に戻すスタックまたはやり直しスタック全体を破棄できます。このパラメーターが NULL でない場合、スタックは破棄されません。 |
戻り値
このメソッドは成功時に S_OK を返します。その他の可能な戻り値には次のものがあります。
| 戻り値 | 説明 |
|---|---|
| 指定された元に戻す単位がスタック内に見つかりませんでした。 | |
| 元に戻すマネージャーが無効になっています。 |
解説(Remarks)
元に戻すマネージャーは、まず与えられた単位を元に戻すスタックで検索し、そこで見つからない場合はやり直しスタックを検索します。単位が見つかった後、与えられた単位と同じスタック上でそれより下にあるすべての単位が破棄されます。元に戻す単位は、IOleParentUndoUnit::FindUnit の呼び出しによって判定されるように、元に戻すマネージャーが含む親単位の子である場合があります。子単位である場合は、与えられた単位を含むルート単位と、該当するスタック上でそれより下にあるすべての単位が破棄されます。
開いている親単位があり、DiscardFrom メソッドが呼び出され、かつ pUU パラメーターが NULL の場合、元に戻すマネージャーは、最初に IOleUndoManager::Close を呼び出さずに、開いている親単位を直ちに解放して破棄する必要があります。親単位を開いたオブジェクトがそれを閉じようとすると、IOleUndoManager::Close は S_FALSE を返します。親単位が開いている場合は、それを破棄してスタックを破棄します。親単位が開いていない場合は、スタックのみを破棄します。pUU パラメーターが NULL でない場合は、開いている親単位はすべて開いたままにする必要があります。
元に戻すスタックをさかのぼって、指定された元に戻す単位まで (その単位を含む) の元に戻すアクションを呼び出すように、元に戻すマネージャーに指示します。
| pUU | IOleUndoUnit* | in | 元に戻すトップレベル単位へのポインター。このパラメーターが NULL の場合、最後に追加されたトップレベル単位が使用されます。 |
戻り値
このメソッドは成功時に S_OK を返します。その他の可能な戻り値には次のものがあります。
| 戻り値 | 説明 |
|---|---|
| 指定された元に戻す単位が元に戻すスタック上にありません。 | |
| 元に戻しの試行とロールバックの試行の両方が失敗しました。元に戻すマネージャーは、含まれる元に戻す単位から取得した E_ABORT を決して伝播してはなりません。代わりに、他の元に戻す単位から返された E_ABORT 値を E_FAIL にマッピングする必要があります。元に戻すマネージャーが他の元に戻す単位から返された E_ABORT 値を E_FAIL にマッピングする必要があるのは、IOleUndoManager::UndoTo の呼び出し側は、元に戻しの試行とロールバックの試行が失敗したことを認識しており、これが E_ABORT という戻り値の唯一の理由であるためです。 | |
| 元に戻すマネージャーが無効になっています。 |
解説(Remarks)
このメソッドは、各トップレベルの元に戻す単位に対して IOleUndoUnit::Do メソッドを呼び出します。その後、その元に戻す単位を解放します。
指定された元に戻す単位はトップレベル単位でなければならないことに注意してください。通常、これは IOleUndoManager::EnumUndoable を通じて取得されます。
元に戻す単位からエラーが返された場合、元に戻すマネージャーは、やり直しスタック上でアクションを実行することにより、エラーから回復するためにドキュメントの状態のロールバックを試みる必要があります。
ロールバックの成否にかかわらず、元に戻すマネージャーは、エラーを返す前に常に両方のスタックをクリアする必要があります。
元に戻すマネージャーが複数のトップレベル単位に対して Do メソッドを呼び出した場合は、エラーを返した単位のみをロールバックする必要があります。成功したトップレベル単位はロールバックしてはなりません。
元に戻すマネージャーはまた、反対側のスタックに単位が追加されたかどうかを追跡し、何も追加されなかった場合にはロールバックを試みないようにする必要があります。エラー処理の詳細な説明については、IOleUndoManager インターフェイスを参照してください。
呼び出し側への注意
元に戻す単位が失敗として E_ABORT を返すことは可能ですが、これは IOleUndoUnit 上では特定の意味を持ちません。元に戻すマネージャーは通常、失敗した元に戻す単位から与えられたエラーコードを返し、E_ABORT は IOleUndoManager::UndoTo 上では特定の意味を持つため、元に戻すマネージャーは E_ABORT を決して転送すべきではありません。そうしないと、実際にはロールバックが成功した可能性があるにもかかわらず、呼び出し側がそれをロールバックの失敗として解釈してしまうためです。やり直しスタックをさかのぼって、指定された元に戻す単位まで (その単位を含む) の元に戻すアクションを呼び出すように、元に戻すマネージャーに指示します。
| pUU | IOleUndoUnit* | in | やり直すトップレベル単位への IOleUndoUnit ポインター。このパラメーターが NULL の場合、最後に追加されたトップレベル単位が使用されます。 |
戻り値
このメソッドは成功時に S_OK を返します。その他の可能な戻り値には次のものがあります。
| 戻り値 | 説明 |
|---|---|
| 指定された元に戻す単位がやり直しスタック上にありません。 | |
| 元に戻しの試行とロールバックの試行の両方が失敗しました。元に戻すマネージャーは、含まれる元に戻す単位から取得した E_ABORT を決して伝播してはなりません。代わりに、他の元に戻す単位から返された E_ABORT 値を E_FAIL にマッピングする必要があります。 | |
| 元に戻すマネージャーが無効になっています。 |
解説(Remarks)
このメソッドは、各トップレベルの元に戻す単位に対して IOleUndoUnit::Do メソッドを呼び出します。その後、その元に戻す単位を解放します。
指定された元に戻す単位はトップレベル単位でなければならないことに注意してください。通常、これは IOleUndoManager::EnumRedoable を通じて取得されます。
元に戻す単位からエラーが返された場合、元に戻すマネージャーは、元に戻すスタック上でアクションを実行することにより、エラーから回復するためにドキュメントの状態のロールバックを試みる必要があります。
ロールバックの成否にかかわらず、元に戻すマネージャーは、エラーを返す前に常に両方のスタックをクリアする必要があります。
元に戻すマネージャーが複数のトップレベル単位に対して IOleUndoUnit::Do メソッドを呼び出した場合は、エラーを返した単位のみをロールバックする必要があります。成功したトップレベル単位はロールバックしてはなりません。
元に戻すマネージャーはまた、反対側のスタックに単位が追加されたかどうかを追跡し、何も追加されなかった場合にはロールバックを試みないようにする必要があります。エラー処理の詳細な説明については、IOleUndoManager インターフェイスを参照してください。
呼び出し側が元に戻すスタックからの一連のトップレベルの元に戻す単位を反復処理するために使用できる列挙子オブジェクトを作成します。
| ppEnum | IEnumOleUndoUnits** | out | 列挙子オブジェクトへのインターフェイスポインターを受け取る IEnumOleUndoUnits ポインター変数のアドレス。 |
戻り値
このメソッドは成功時に S_OK を返します。その他の可能な戻り値には次のものがあります。
| 戻り値 | 説明 |
|---|---|
| 元に戻すマネージャーが無効になっています。 |
解説(Remarks)
このメソッドが呼び出されるたびに、新しい列挙子オブジェクトが作成されます。列挙される項目の系列が時間の経過とともに変化する場合、列挙操作の結果は呼び出しごとに異なる可能性があります。
このメソッドは、新しい列挙子オブジェクトの参照カウントをインクリメントするために、そのオブジェクトに対して IUnknown::AddRef を呼び出します。呼び出し側は、列挙子オブジェクトが不要になったときに、それに対して IUnknown::Release を呼び出す責任があります。
呼び出し側がやり直しスタックからの一連のトップレベルの元に戻す単位を反復処理するために使用できる列挙子オブジェクトを作成します。
| ppEnum | IEnumOleUndoUnits** | out | 列挙子オブジェクトへのインターフェイスポインターを受け取る IEnumOleUndoUnits ポインター変数のアドレス。 |
戻り値
このメソッドは成功時に S_OK を返します。その他の可能な戻り値には次のものがあります。
| 戻り値 | 説明 |
|---|---|
| 元に戻すマネージャーが無効になっています。 |
解説(Remarks)
このメソッドが呼び出されるたびに、新しい列挙子オブジェクトが作成されます。列挙される項目の系列が時間の経過とともに変化する場合、列挙操作の結果は呼び出しごとに異なる可能性があります。
このメソッドは、新しい列挙子オブジェクトの参照カウントをインクリメントするために、そのオブジェクトに対して IUnknown::AddRef を呼び出します。呼び出し側は、列挙子オブジェクトが不要になったときに、それに対して IUnknown::Release を呼び出す責任があります。
元に戻すスタックの一番上にあるトップレベルの元に戻す単位の説明を取得します。
| pBstr | LPWSTR* | out | 元に戻すスタックの一番上にあるトップレベルの元に戻す単位の説明を含む文字列へのポインター。 |
戻り値
このメソッドは成功時に S_OK を返します。その他の可能な戻り値には次のものがあります。
| 戻り値 | 説明 |
|---|---|
| 元に戻すスタックが空です。 | |
| 元に戻すマネージャーが無効になっています。 |
解説(Remarks)
このメソッドは、ホストアプリケーションが 編集 - 元に戻す メニュー項目に説明を追加するための便利なショートカットを提供します。pBstr パラメーターは、標準の文字列アロケーターで割り当てられた文字列です。呼び出し側は、この文字列を解放する責任があります。
やり直しスタックの一番上にあるトップレベルの元に戻す単位の説明を取得します。
| pBstr | LPWSTR* | out | やり直しスタックの一番上にあるトップレベルの元に戻す単位の説明を含む文字列へのポインター。 |
戻り値
このメソッドは成功時に S_OK を返します。その他の可能な戻り値には次のものがあります。
| 戻り値 | 説明 |
|---|---|
| 元に戻すスタックが空です。 | |
| 元に戻すマネージャーが無効になっています。 |
解説(Remarks)
このメソッドは、ホストアプリケーションが 編集 - やり直し メニュー項目に説明を追加するための便利なショートカットを提供します。pBstr パラメーターは、標準の文字列アロケーターで割り当てられた文字列です。呼び出し側は、この文字列を解放する責任があります。
元に戻すマネージャーを有効または無効にします。
| fEnable | BOOL | in | 元に戻すマネージャーを有効にするか無効にするかを示します。TRUE の場合、元に戻すマネージャーを有効にする必要があります。FALSE の場合、元に戻すマネージャーを無効にする必要があります。 |
戻り値
このメソッドは、元に戻すマネージャーが正常に有効化または無効化された場合に S_OK を返します。その他の可能な戻り値には次のものがあります。
| 戻り値 | 説明 |
|---|---|
| スタック上に開いている元に戻す単位があるか、元に戻すマネージャーが現在、元に戻しまたはやり直しを実行しています。 |
解説(Remarks)
元に戻すマネージャーは、有効から無効へ移行する際に、両方のスタックをクリアする必要があります。
元に戻すマネージャーが無効になっている場合、IOleUndoManager の各メソッドは指定されたとおりに動作しなければなりません。詳細については各メソッドを参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IOleUndoManager "{D001F200-EF97-11CE-9BC9-00AA00608E01}" #usecom global IOleUndoManager IID_IOleUndoManager "{}" #comfunc global IOleUndoManager_Open 3 sptr #comfunc global IOleUndoManager_Close 4 sptr,int #comfunc global IOleUndoManager_Add 5 sptr #comfunc global IOleUndoManager_GetOpenParentState 6 var #comfunc global IOleUndoManager_DiscardFrom 7 sptr #comfunc global IOleUndoManager_UndoTo 8 sptr #comfunc global IOleUndoManager_RedoTo 9 sptr #comfunc global IOleUndoManager_EnumUndoable 10 sptr #comfunc global IOleUndoManager_EnumRedoable 11 sptr #comfunc global IOleUndoManager_GetLastUndoDescription 12 var #comfunc global IOleUndoManager_GetLastRedoDescription 13 var #comfunc global IOleUndoManager_Enable 14 int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IOleUndoManager "{D001F200-EF97-11CE-9BC9-00AA00608E01}" #usecom global IOleUndoManager IID_IOleUndoManager "{}" #comfunc global IOleUndoManager_Open 3 sptr #comfunc global IOleUndoManager_Close 4 sptr,int #comfunc global IOleUndoManager_Add 5 sptr #comfunc global IOleUndoManager_GetOpenParentState 6 sptr #comfunc global IOleUndoManager_DiscardFrom 7 sptr #comfunc global IOleUndoManager_UndoTo 8 sptr #comfunc global IOleUndoManager_RedoTo 9 sptr #comfunc global IOleUndoManager_EnumUndoable 10 sptr #comfunc global IOleUndoManager_EnumRedoable 11 sptr #comfunc global IOleUndoManager_GetLastUndoDescription 12 sptr #comfunc global IOleUndoManager_GetLastRedoDescription 13 sptr #comfunc global IOleUndoManager_Enable 14 int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。