自己系統中本身對於放大縮小等功能直接是單獨重寫的,但是如果在加一個工具條具有相同功能的話兩者之間會有一些沖突,為解決該沖突可以重寫工具條的OnItemClick事件
該工具條命名為axTool
我本身是在地圖的鼠標點擊事件中寫的
代碼如下:
private void axMap_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e) //操縱ae圖面
{
IEnvelope pEnv;
axMap.MousePointer = esriControlsMousePointer.esriPointerCrosshair;
IGeometry geometry = null;
ESRI.ArcGIS.Geometry.Point point = new ESRI.ArcGIS.Geometry.PointClass();
IGraphicsContainer pGC = axMap.ActiveView as IGraphicsContainer;
axMap.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);//刷新所有圖層
switch (flag)
{
case 1: //地圖放大
pEnv = axMap.TrackRectangle();
pEnv.Expand(0.5, 0.5, true);
axMap.Extent = pEnv;
break;
case 2: //視圖縮小
pEnv = axMap.Extent;
pEnv.Expand(2, 2, true);
axMap.Extent = pEnv;
break;
case 3: //視圖平移
axMap.Pan();
break;
}
為解決沖突為axTool添加事件:
private void axTool_OnItemClick(object sender, IToolbarControlEvents_OnItemClickEvent e) //解決工具條點擊後和其他工具使用的沖突
{
//先重置地圖當前工具
flag = -1; //設置當前地圖點擊無效
axMap.CurrentTool = null; //設置當前地圖工具為空
int toolnum = e.index; //獲取工具條上點擊工具的索引
ICommand _command = axTool.CommandPool.get_Command(toolnum); //根據該下標志獲取點擊命令
axMap.CurrentTool = _command as ITool; //設置當前地圖的命令為該命令
_command.OnClick(); //響應該命令
}
這樣即可成功解決該沖突問題