一起学习ArcEngine(7)上/下一个视图

上一个视图命令可以快速的回退到最后一次地图操作以前的地图范围,

下一个视图命令和上一个视图命令恰好相反。举个简单的例子,我现在看北京市的地图,同事甲过来想看看上海的地图,刚看不久,同事乙过来了,他想看北京的,这时上一个视图和下一个视图的命令就有用了,呵呵,同事甲过来后,我把地图平移到上海市范围,同事乙过来后,我点击上一个视图 地图会快速定位到北京市范围,很方便。

     要实现该功能,用到的是IExtentStack接口,即堆扩展接口。该接口提供的方法如下图所示

image

上一个视图命令,只要执行Undo方法即可;下一个视图命令只要执行Redo方法即可。

上一个视图命令 的实现代码如下

   1:    public class GoBackToPreviousExtent : CommandBase
   2:      {
   3:          public GoBackToPreviousExtent()
   4:              : base("GoBackToPreviousExtent")
   5:          { }
   6:          public GoBackToPreviousExtent(AxMapControl mapCtl)
   7:               : base(mapCtl, "GoBackToPreviousExtent") 
   8:          { }
   9:          public GoBackToPreviousExtent(AxPageLayoutControl plCtl)
  10:              : base(plCtl, "GoBackToPreviousExtent")
  11:          { }
  12:          public override void OnClick()
  13:          {
  14:              IExtentStack pMapExtent = m_pActiveView.ExtentStack;
  15:              //判断是否可以回退,第一个视图不可以回退
  16:              if (pMapExtent.CanUndo())
  17:              {
  18:                  pMapExtent.Undo();
  19:              }
  20:          }
  21:      }

下一个视图命令 的实现代码如下

   1:  public class GoToNextExtent : CommandBase
   2:      {
   3:           public GoToNextExtent()
   4:              : base("GoToNextExtent")
   5:          { }
   6:          public GoToNextExtent(AxMapControl mapCtl)
   7:               : base(mapCtl, "GoToNextExtent") 
   8:          { }
   9:          public GoToNextExtent(AxPageLayoutControl plCtl)
  10:              : base(plCtl, "GoToNextExtent")
  11:          { }
  12:   
  13:          public override void OnClick()
  14:          {
  15:              IExtentStack pMapExtent = (IExtentStack)m_pActiveView.ExtentStack;
  16:   
  17:              //判断是否可以回到下一个视图,最后一个视图没有下一个视图
  18:              if (pMapExtent.CanRedo())
  19:              {
  20:                  pMapExtent.Redo();
  21:              }
  22:          }
  23:      }
原文地址:https://www.cnblogs.com/liuyh208/p/1572924.html