GIS二次开发之上一个视图/下一个视图
这次要说的和前一篇中提到的全图是一样的,都是命令类功能,在自定义的时候只要重写OnClick()方法即可。同样如果想用button写,只要知道他们分别对应着ControlsMapZoomToLastExtentBackCommand和ControlsMapZoomToLastExtentForwardCommand,之后的代码就很容易了。简单的看看在button中实现这两个功能的代码:
代码
#region 上一个视图
private void btnGoBack_Click(object sender, EventArgs e)
{
ControlsMapZoomToLastExtentBackCommand mapGoBack = new ControlsMapZoomToLastExtentBackCommandClass();
mapGoBack.OnCreate(axMapMain.Object);
mapGoBack.OnClick();
}
#endregion
#region 下一个视图
private void btnGoForward_Click(object sender, EventArgs e)
{
ControlsMapZoomToLastExtentForwardCommand mapGoForward = new ControlsMapZoomToLastExtentForwardCommandClass();
mapGoForward.OnCreate(axMapMain.Object);
mapGoForward.OnClick();
}
#endregion
private void btnGoBack_Click(object sender, EventArgs e)
{
ControlsMapZoomToLastExtentBackCommand mapGoBack = new ControlsMapZoomToLastExtentBackCommandClass();
mapGoBack.OnCreate(axMapMain.Object);
mapGoBack.OnClick();
}
#endregion
#region 下一个视图
private void btnGoForward_Click(object sender, EventArgs e)
{
ControlsMapZoomToLastExtentForwardCommand mapGoForward = new ControlsMapZoomToLastExtentForwardCommandClass();
mapGoForward.OnCreate(axMapMain.Object);
mapGoForward.OnClick();
}
#endregion
下面看看重写OnClick方法的代码
代码
#region 上一视图
public override void OnClick()
{
if (null == m_pActiveView) return;
IExtentStack m_stack = m_pActiveView.ExtentStack;
if (m_stack.CanUndo())
{
m_stack.Undo();
}
}
#endregion
#region 下一视图
public override void OnClick()
{
if (null == m_pActiveView) return;
IExtentStack m_stack = m_pActiveView.ExtentStack;
if (m_stack.CanRedo())
{
m_stack.Redo();
}
}
#endregion
public override void OnClick()
{
if (null == m_pActiveView) return;
IExtentStack m_stack = m_pActiveView.ExtentStack;
if (m_stack.CanUndo())
{
m_stack.Undo();
}
}
#endregion
#region 下一视图
public override void OnClick()
{
if (null == m_pActiveView) return;
IExtentStack m_stack = m_pActiveView.ExtentStack;
if (m_stack.CanRedo())
{
m_stack.Redo();
}
}
#endregion
在重写的时候,注意利用了IExtentStack堆栈接口,以stack保存了每次操作的地图视图,提供的CanUndo()和CanRedo()方法,判断栈中是否有视图可以back或者forward。