IOleParentUndoUnit-Schnittstelle (ocidl.h)

Ermöglicht rückgängigen Einheiten, untergeordnete Rückgängigeinheiten zu enthalten. Beispielsweise kann eine komplexe Aktion dem Endbenutzer als einzelne Rückgängigaktion angezeigt werden, obwohl eine Reihe separater Aktionen beteiligt sind. Alle untergeordneten Rückgängigaktionen sind in der übergeordneten Undo-Einheit der obersten Ebene enthalten.

Eine übergeordnete Undo-Einheit wird zunächst mit der IOleUndoManager::Open-Methode erstellt. Das Hinzufügen von Rückgängigeinheiten sollte immer über den Rückgängig-Manager erfolgen. Die Methoden IOleParentUndoUnit::Open und IOleParentUndoUnit::Close für übergeordnete Einheiten werden vom Undo-Manager aufgerufen. Wenn übergeordnete Einheiten im Rückgängig-Manager zurückrufen, führt dies zu unendlicher Rekursion.

Während eine übergeordnete Einheit geöffnet ist, fügt ihr der Rückgängig-Manager Rückgängigeinheiten hinzu, indem er IOleParentUndoUnit::Add aufruft. Wenn der Rückgängig-Manager ein übergeordnetes übergeordnetes Element der obersten Ebene schließt, wird die gesamte Undo-Einheit mit ihren geschachtelten Untergeordneten auf dem Undo-Stapel platziert.

Ein aktivierende übergeordnetes Element muss im Stapel geöffnet sein, bevor andere Rückgängigeinheiten hinzugefügt werden können. Wenn eine nicht geöffnet ist, sollte der Stapel stattdessen gelöscht werden. Dadurch wird sichergestellt, dass rückgängige Einheiten nur als Ergebnis von Benutzeraktionen und nicht durch programmgesteuerte Aktionen hinzugefügt werden. Beispielsweise, wenn Ihre Anwendung das Klicken auf eine bestimmte Schaltfläche nicht mehr rückgängig machen möchte, aber dieselbe Aktion auch über das Objektmodell verfügbar gemacht wird. Diese Aktion sollte über die Benutzeroberfläche, aber nicht über das Objektmodell rückgängig sein, da Sie den Zustand des Skriptcodes des Benutzers nicht wiederherstellen können. Da derselbe Code die Änderung in beiden Fällen implementiert, sollte der Benutzeroberflächencode, der das Klicken auf schaltflächen verarbeitet, ein aktivierende übergeordnetes Element im Stapel öffnen, den entsprechenden Code aufrufen und dann die übergeordnete Einheit schließen. Der Objektmodellcode würde keine übergeordnete Einheit öffnen, wodurch der Rückgängigstapel gelöscht wird.

Ein blockierende übergeordnetes Element wird verwendet, wenn Sie nicht möchten, dass Ihr Code anderen Code aufruft, von dem Sie wissen, dass möglicherweise versucht wird, rückgängige Einheiten zum Stapel hinzuzufügen. Beispielsweise sollten Sie ein blockierende übergeordnetes Element verwenden, wenn Sie Code aufrufen, der Rückgängigeinheiten erstellt, die ihr äußerer Code bereits erstellt hat, die das gewünschte Verhalten vollständig rückgängig macht.

Ein nicht aktivierende übergeordnetes Element wird verwendet, wenn Sie ein Ereignis als Reaktion auf eine Benutzeraktion auslösen. Der Stapel wird nur gelöscht, wenn der Ereignishandler etwas getan hat, das versucht hat, eine Rückgängig-Einheit zu erstellen, aber wenn kein Handler vorhanden ist, wird der Rückgängigstapel beibehalten.

Wenn ein Objekt eine übergeordnete Einheit erstellen muss, müssen mehrere Fälle berücksichtigt werden:

  • Um eine aktivierende übergeordnete Einheit zu erstellen, ruft das Objekt IOleUndoManager::GetOpenParentState für den Undo-Manager auf und überprüft den Rückgabewert. Wenn der Wert S_FALSE ist, erstellt das Objekt das aktivierende übergeordnete Element und öffnet ihn. Wenn der Rückgabewert S_OK ist, ist bereits ein übergeordnetes Element geöffnet. Wenn das geöffnete übergeordnete Element blockiert ist (UAS_BLOCKED Bitsatz) oder ein aktivierende übergeordnetes Element (UAS_BLOCKED und UAS_NOPARENTENABLE Bits nicht festgelegt), muss das aktivierende übergeordnete Element nicht erstellt werden. Wenn das derzeit geöffnete übergeordnete Element ein deaktiviertes übergeordnetes Element ist (UAS_NOPARENTENABLE Bitsatz), sollte das aktivierende übergeordnete Element erstellt und geöffnet werden, um das Hinzufügen von Rückgängigeinheiten erneut zu aktivieren. Beachten Sie, dass UAS_NORMAL den Wert 0 aufweist, was bedeutet, dass es sich um das Fehlen aller anderen Bits handelt und kein Bitflag ist, das festgelegt werden kann. Wenn Sie *pdwState mit UAS_NORMAL vergleichen, maskieren Sie nicht verwendete Bits aus pdwState mit UAS_MASK, um zukünftige Erweiterungen zu ermöglichen.
  • Um ein blockiertes übergeordnetes Element zu erstellen, ruft das Objekt IOleUndoManager::GetOpenParentState auf und sucht nach einem geöffneten übergeordneten Element, das bereits blockiert ist. Wenn eine vorhanden ist, ist es nicht erforderlich, das neue blockierende übergeordnete Element zu erstellen. Andernfalls wird es vom Objekt erstellt und im Stapel geöffnet.
  • Um ein deaktiviertes übergeordnetes Element zu erstellen, ruft das Objekt IOleUndoManager::GetOpenParentState auf und sucht nach einem geöffneten übergeordneten Element, das blockiert oder deaktiviert ist. Wenn eine der beiden vorhanden ist, ist es nicht erforderlich, das neue übergeordnete Element zu erstellen. Andernfalls erstellt das Objekt das übergeordnete Objekt und öffnet es im Stapel.
Für den Fall, dass sowohl die UAS_NOPARENTENABLE- als auch UAS_BLOCKED-Flags festgelegt sind, sollte das Flag verwendet werden, das für den Aufrufer am relevantesten ist, wobei UAS_NOPARENTENABLE Vorrang hat. Wenn ein Objekt beispielsweise eine einfache Rückgängig-Einheit erstellt, sollte es auf das flag UAS_NOPARENTENABLE achten und den Rückgängigstapel löschen. Wenn eine aktivierende übergeordnete Einheit erstellt wird, sollte sie auf das flag UAS_BLOCKED achten und die Erstellung überspringen.

Wenn die übergeordnete Rückgängigeinheit als blockiert markiert ist, verwirft sie alle empfangenen Undo-Einheiten.

Vererbung

Die IOleParentUndoUnit-Schnittstelle erbt von IOleUndoUnit. IOleParentUndoUnit verfügt auch über folgende Arten von Membern:

Methoden

Die IOleParentUndoUnit-Schnittstelle verfügt über diese Methoden.

 
IOleParentUndoUnit::Add

Fügt der Auflistung eine einfache Rückgängig-Einheit hinzu.
IOleParentUndoUnit::Close

Schließt die angegebene übergeordnete Rückgängig-Komponente. (IOleParentUndoUnit.Close)
IOleParentUndoUnit::FindUnit

Gibt an, ob die angegebene Einheit ein untergeordnetes Element dieser Rückgängig-Einheit oder einer ihrer untergeordneten Einheiten ist, d. h., wenn die angegebene Einheit Teil der Hierarchie in dieser übergeordneten Einheit ist.
IOleParentUndoUnit::GetParentState

Ruft Zustandsinformationen zur innersten geöffneten übergeordneten Undo-Einheit ab. (IOleParentUndoUnit.GetParentState)
IOleParentUndoUnit::Open

Öffnet eine neue übergeordnete Undo-Einheit, die Teil des Undo-Stapels der enthaltenden Einheit wird.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile ocidl.h

Weitere Informationen

IOleUndoManager

IOleUndoUnit