using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using ESRI.ArcGIS.SystemUI;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.PageLayoutControl;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.Utility.BaseClasses;
using ESRI.ArcGIS.ControlCommands;
using ESRI.ArcGIS.Utility.CATIDs;
namespace Commands
{
/// <summary>
/// Summary description for cmdDelLayer.
/// </summary>
[Guid("fd14ad9f-665d-433e-97f0-6021c71478c2")]
public class cmdDelLayer:BaseCommand
{
#region "Component Category Registration"
[ComRegisterFunction()]
static void Reg(string regKey)
{
ControlsCommands.Register(regKey);
}
[ComUnregisterFunction()]
static void Unreg(string regKey)
{
ControlsCommands.Unregister(regKey);
}
#endregion
IHookHelper engHook = new HookHelperClass();
//IMapDocument mxdDoc = null;
ESRI.ArcGIS.PageLayoutControl.IPageLayoutControl2 mapCtrl = null;
public cmdDelLayer()
{
base.m_caption = "delLayer";
base.m_category = "mapViewer";
base.m_enabled = true;
base.m_message = "删除地图文档中最顶端图层";
base.m_name = "delLayer";
base.m_toolTip = "删除最顶端图层";
}
public override void OnClick()
{
// TOD Add cmdDelLayer.OnClick implementation
try
{
if(mapCtrl == null)
{
MessageBox.Show("没有得到MapControl");
return;
}
string docPath = mapCtrl.DocumentFilename;
IMapDocument mxdDoc = new MapDocumentClass();
mxdDoc.Open(docPath,"");
if(mxdDoc.get_IsReadOnly(docPath))
{
MessageBox.Show("地图文档只读,不可修改!" );
return;
}
else
{
if(mxdDoc.MapCount == 0 )return;
IMap pMap = mxdDoc.get_Map(0);
if(pMap.LayerCount != 0)pMap.DeleteLayer(pMap.get_Layer(0));
mxdDoc.Save(true,true);
if(mapCtrl.CheckMxFile(docPath))
mapCtrl.LoadMxFile(docPath,null); //一定要重新加载地图文档,才能刷新显示地图文档已改变
mapCtrl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography,null,null);
//mxdDoc.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography,null,null);
}
//object o1 = Type.Missing,o2 = Type.Missing;
}
catch(COMException e)
{
MessageBox.Show("com删除图层出错:" + e.Message);
}
catch(Exception e)
{
MessageBox.Show("删除图层出错:" + e.Message);
}
//base.OnClick ();
}
public override void OnCreate(object hook)
{
// TOD Add cmdDelLayer.OnCreate implementation
//if(hook is IMapControl3)
mapCtrl = (IPageLayoutControl2)hook;
}
}
}