本例要演示的是如何在ArcMap中对图形的移动动作进行撤销和重做,用到IExtentStack接口。以帮助理解ArcMap中对撤销和重做实现的方法。
要点
IActiveView的ExtentStack属性保存了其Extent改变的“历史记录”,而IMxDocument的OperationStack属性则有能力记录更复杂的编辑动作的历史。用户只有深刻理解了概念,才能够完成特定功能“历史记录”的定制。
程序说明
过程 Extent_UnDo和Extent_RnDo分别模拟了ArcMap中Tools工具栏上的“Go Back To Previous Extent”和“Go To Next Extent”两个按钮的功能。
代码
Option Explicit
Public Sub Extent_UnDo()
Dim pMxDocument As IMxDocument
Dim pActiveView As IActiveView
Dim pExtentStack As IExtentStack
On Error GoTo ErrorHandler
Set pMxDocument = ThisDocument
Set pActiveView = pMxDocument.FocusMap
Set pExtentStack = pActiveView.ExtentStack
If pExtentStack.CanUndo Then
pExtentStack.Undo
End If
Exit Sub
ErrorHandler:
MsgBox Err.Description
End Sub
Public Sub Extent_ReDo()
Dim pMxDocument As IMxDocument
Dim pActiveView As IActiveView
Dim pExtentStack As IExtentStack
On Error GoTo ErrorHandler
Set pMxDocument = ThisDocument
Set pActiveView = pMxDocument.FocusMap
Set pExtentStack = pActiveView.ExtentStack
If pExtentStack.CanRedo Then
pExtentStack.Redo
End If
Exit Sub
ErrorHandler:
MsgBox Err.Description
End Sub