IOleUndoManager 인터페이스(ocidl.h)
IOleUndoManager 인터페이스를 사용하면 컨테이너가 포함된 컨트롤 내에서 발생하는 작업에 대해 다단계 실행 취소 및 다시 실행 작업을 구현할 수 있습니다.
상속
IOleUndoManager 인터페이스는 IUnknown 인터페이스에서 상속됩니다. IOleUndoManager 에는 다음과 같은 유형의 멤버도 있습니다.
메서드
IOleUndoManager 인터페이스에는 이러한 메서드가 있습니다.
IOleUndoManager::Add 컬렉션에 간단한 실행 취소 단위를 추가합니다. 부모 실행 취소 단위가 열려 있는 동안 실행 취소 관리자는 IOleParentUndoUnit::Add를 호출하여 실행 취소 단위를 추가합니다. |
IOleUndoManager::Close 지정된 부모 실행 취소 단위를 닫습니다. (IOleUndoManager.Close) |
IOleUndoManager::D iscardFrom 실행 취소 관리자에게 실행 취소 또는 다시 실행 스택에서 지정한 실행 취소 단위와 그 아래의 모든 실행 취소 단위를 취소하도록 지시합니다. |
IOleUndoManager::Enable 실행 취소 관리자를 사용하거나 사용하지 않도록 설정합니다. |
IOleUndoManager::EnumRedoable 호출자가 다시 실행 스택에서 일련의 최상위 실행 취소 단위를 반복하는 데 사용할 수 있는 열거자 개체를 만듭니다. |
IOleUndoManager::EnumUndoable 호출자가 실행 취소 스택에서 일련의 최상위 실행 취소 단위를 반복하는 데 사용할 수 있는 열거자 개체를 만듭니다. |
IOleUndoManager::GetLastRedoDescription 다시 실행 스택 맨 위에 있는 최상위 실행 취소 단위에 대한 설명을 검색합니다. |
IOleUndoManager::GetLastUndoDescription 실행 취소 스택 위에 있는 최상위 실행 취소 단위에 대한 설명을 검색합니다. |
IOleUndoManager::GetOpenParentState 가장 안쪽에 열려 있는 부모 실행 취소 단위에 대한 상태 정보를 검색합니다. (IOleUndoManager.GetOpenParentState) |
IOleUndoManager::Open 포함된 단위의 실행 취소 스택의 일부가 되는 새 부모 실행 취소 단위를 엽니다. |
IOleUndoManager::RedoTo 실행 취소 관리자에게 다시 실행 취소 스택을 통해 지정된 실행 취소 단위까지 실행 취소 작업을 다시 호출하도록 지시합니다. |
IOleUndoManager::UndoTo 실행 취소 관리자에게 지정한 실행 취소 단위까지 실행 취소 스택을 통해 실행 취소 작업을 다시 호출하도록 지시합니다. |
설명
컨트롤은 IOleUndoUnit 인터페이스 또는 IOleUndoUnit 에서 파생된 IOleParentUndoUnit 인터페이스를 사용하여 부모 실행 취소 단위를 사용하여 실행 취소 단위 를 만들어야 합니다. 이러한 인터페이스는 모두 실행 취소 작업을 수행하고 부모 실행 취소 단위는 중첩된 실행 취소 단위를 추가로 포함할 수 있습니다.
실행 취소 관리자는 중앙 집중식 실행 취소 및 다시 실행 서비스를 제공합니다. 실행 취소 및 다시 실행 스택에서 부모 실행 취소 단위 및 간단한 실행 취소 단위를 관리합니다. 개체가 UI 활성인지 여부에 관계없이 실행 취소 관리자에서 메서드를 호출하여 이러한 스택에 실행 취소 단위를 저장할 수 있습니다.
그런 다음 중앙 집중식 실행 취소 관리자에는 호스트 애플리케이션에 대한 실행 취소 및 다시 실행 사용자 인터페이스를 지원하는 데 필요한 데이터가 있으며 스택이 가득 차면 실행 취소 정보를 점진적으로 삭제할 수 있습니다.
실행 취소 관리자는 서비스로 구현되고 개체는 IServiceProvider 인터페이스에서 IOleUndoManger에 대한 포인터를 가져옵니다. 일반적으로 컨테이너에 의해 구현됩니다. 서비스는 두 개의 스택, 즉 실행 취소 스택과 다시 실행 스택을 관리하며, 각 스택에는 포함된 개체 또는 컨테이너 애플리케이션 자체에 의해 생성된 실행 취소 단위가 포함됩니다.
실행 취소 단위는 일반적으로 최종 사용자가 수행한 작업에 대한 응답으로 생성됩니다. 개체는 프로그래밍 이벤트에 대한 실행 취소 작업을 생성하지 않습니다. 실제로 프로그래밍 방식 이벤트는 스택의 실행 취소 단위에 의한 가정을 무효화할 수 있으므로 실행 취소 스택을 지워야 합니다.
개체의 상태가 변경되면 해당 변경 내용을 실행 취소하는 데 필요한 모든 정보를 캡슐화하는 실행 취소 단위를 만듭니다. 개체는 실행 취소 관리자의 메서드를 호출하여 해당 실행 취소 단위를 스택에 배치합니다. 그런 다음 최종 사용자가 실행 취소 작업을 선택하면 실행 취소 관리자는 스택에서 최상위 실행 취소 단위를 가져와 서 IOleUndoUnit::D o 메서드를 호출하여 해당 작업을 호출한 다음 해제합니다. 최종 사용자가 다시 실행 작업을 선택하면 실행 취소 관리자는 스택에서 위쪽 다시 실행 단위를 가져와 서 IOleUndoUnit::D o 메서드를 호출하여 해당 작업을 호출한 다음 해제합니다.
실행 취소 관리자에는 기본 상태, 실행 취소 상태 및 다시 실행 상태의 세 가지 상태가 있습니다. 기본 상태에서 시작됩니다. 실행 취소 스택에서 작업을 수행하려면 실행 취소 상태로 전환하고, 실행 취소 단위 에서 IOleUndoUnit::D o 를 호출하고, 기본 상태로 돌아갑니다. 다시 실행 스택에서 작업을 수행하려면 다시 실행 상태로 전환하고, 실행 취소 단위에서 IOleUndoUnit::D o 를 호출하고, 기본 상태로 돌아갑니다.
실행 취소 관리자가 기본 상태인 동안 새 실행 취소 단위를 받으면 단위를 실행 취소 스택에 배치하고 전체 다시 실행 스택을 삭제합니다. 실행 취소 상태에 있는 동안 들어오는 단위를 다시 실행 스택에 배치합니다. 다시 실행 상태인 동안 다시 실행 스택을 플러시하지 않고 실행 취소 스택에 배치합니다.
또한 실행 취소 관리자를 사용하면 개체가 두 스택의 모든 개체에서 시작하여 실행 취소 또는 다시 실행 스택을 삭제할 수 있습니다.
호스트 애플리케이션은 실행 취소 관리자의 scope 결정합니다. 예를 들어 한 애플리케이션에서 scope 문서 수준에 있을 수 있습니다. 각 문서에 대해 별도의 실행 취소 관리자가 유지 관리되고 실행 취소는 각 문서에 대해 독립적으로 관리됩니다. 그러나 다른 애플리케이션은 하나의 실행 취소 관리자를 유지 관리하므로 전체 애플리케이션에 대해 하나의 실행 취소 scope.
오류 처리
실행 취소 작업이 실패하고 문서를 불안정한 상태로 두는 것은 실행 취소 관리자, 실행 취소 단위 및 애플리케이션 자체가 모두 함께 작동해야 방지할 수 있습니다. 따라서 단위, 실행 취소 관리자 및 실행 취소를 사용하는 애플리케이션 또는 구성 요소를 실행 취소해야 하는 특정 요구 사항이 있습니다.
실행 취소를 수행하기 위해 실행 취소 관리자는 하나 이상의 실행 취소 단위에서 IOleUndoUnit::D o 를 호출합니다. 그러면 더 많은 단위를 포함할 수 있습니다. 계층 구조의 어딘가에 있는 단위가 실패하면 오류는 결국 실행 취소 관리자에 도달합니다. 이 관리자는 마지막 최상위 단위를 호출하기 전에 문서의 상태를 롤백하려고 시도합니다. 실행 취소 관리자는 실행 취소 시도 중에 다시 실행 스택에 추가된 단위에서 IOleUndoUnit::D o 를 호출하여 롤백을 수행합니다. 롤백도 실패하면 실행 취소 관리자는 모든 항목을 포기하고 애플리케이션으로 돌아가야 합니다. 실행 취소 관리자는 롤백이 성공했는지 여부를 나타내며 애플리케이션은 이를 기반으로 구성 요소를 다시 초기화하여 알려진 상태에 있도록 다른 작업을 수행할 수 있습니다.
스택에 실행 취소 단위를 추가하는 모든 단계는 원자성으로 수행해야 합니다. 즉, 모든 단계는 성공해야 하며 그 중 어느 단계도 성공하지 않아야 합니다.
실행 취소 관리자를 제공하는 호스트 애플리케이션은 실행 취소가 실패할 때 수행할 작업을 결정합니다. 최소한 사용자에게 오류를 알려야 합니다. 호스트 애플리케이션은 실행 취소 관리자가 실행 취소에 성공했는지 여부와 시도된 롤백이 성공했는지 여부를 나타냅니다. 실행 취소 및 롤백이 모두 실패한 경우 호스트 애플리케이션은 애플리케이션을 즉시 종료하는 등 여러 옵션을 사용자에게 표시할 수 있습니다.
단순 실행 취소 단위는 실패를 반환하는 경우 개체의 상태를 변경하지 않아야 합니다. 여기에는 다시 실행 스택의 상태 또는 다시 실행 취소를 수행하는 경우 스택 실행 취소가 포함됩니다. 또한 성공하면 해당 단위를 다시 실행 또는 실행 취소 스택에 배치해야 합니다. 애플리케이션은 단위가 호출되기 전과 후에 안정적이어야 합니다.
부모 실행 취소 단위는 하나의 예외를 제외하고 단순 단위와 동일한 요구 사항을 갖습니다. 다른 자식이 실패하기 전에 하나 이상의 자식이 성공한 경우 부모 단위는 다시 실행 스택에서 해당 단위를 커밋하고 실패를 부모로 반환해야 합니다. 자식이 성공하지 못한 경우 부모 단위는 롤백해야 하는 상태를 변경한 경우에만 해당 다시 실행 단위를 커밋해야 합니다. 예를 들어 부모 단위에 세 개의 간단한 단위가 포함되어 있다고 가정합니다. 처음 두 은 성공하고 다시 실행 스택에 단위를 추가했지만 세 번째 단위는 실패했습니다. 이 시점에서 부모 단위는 해당 다시 실행 단위를 커밋하고 실패를 반환합니다.
부작용으로 부모 단위는 자녀의 성공에 따라 상태를 변경해서는 안 됩니다. 이렇게 하면 롤백 동작이 중단됩니다. 부모 단위가 상태를 변경하는 경우 자식을 호출하기 전에 이를 수행해야 합니다. 그런 다음, 상태 변경이 실패하면 다시 실행 단위를 커밋하지 않아야 하며 자식을 호출하지 않아야 하며 실패를 부모로 반환해야 합니다.
실행 취소 관리자에는 실행 취소 또는 다시 실행이 실패할 때 롤백을 시도하는 오류 처리에 대한 기본 요구 사항이 하나 있습니다.
비준수 개체
다단계 실행 취소를 지원하지 않는 개체는 전역 실행 취소 서비스에 심각한 문제를 일으킬 수 있습니다. 개체를 사용하여 실행 취소 관리자를 제대로 업데이트할 수 없으므로 다른 개체에서 제출한 모든 단위도 의심됩니다. 해당 단위는 비준수 개체의 상태에 의존할 수 있기 때문입니다. 비준수 개체의 상태가 일치하지 않으므로 규격 개체의 단위를 실행 취소하려고 하면 성공하지 못할 수 있습니다.
다중 수준 실행 취소를 지원하지 않는 개체를 검색하려면 OLEMISC_SUPPORTSMULTILEVELUNDO 값에 대해 검사. 전역 실행 취소 서비스에 참여할 수 있는 개체는 이 값을 설정합니다.
이 값이 없는 개체가 사용자가 볼 수 있는 실행 취소 컨텍스트에 추가되면 이 컨텍스트에 대해 실행 취소 사용자 인터페이스를 사용하지 않도록 설정하는 것이 가장 좋습니다. 또는 사용자에게 부분 실행 취소 지원을 제공할지 여부를 묻는 대화 상자를 표시하여 새 개체의 비준수 작업을 처리할 수 있습니다.
또한 비규격 개체를 중첩된 컨테이너에 추가할 수 있습니다. 이 경우 중첩된 컨테이너는 IOleUndoManager::Enable with FALSE를 호출하여 실행 취소가 더 이상 안전하게 지원되지 않는다는 것을 실행 취소 관리자에게 알려야 합니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000 Professional [데스크톱 앱 | UWP 앱] |
지원되는 최소 서버 | Windows 2000 Server [데스크톱 앱 | UWP 앱] |
대상 플랫폼 | Windows |
헤더 | ocidl.h |