liutingxiang的个人博客分享 http://blog.sciencenet.cn/u/liutingxiang

博文

ArcGIS Engine二次开发学习(9)MapControl、TOCControl右键菜单

已有 5191 次阅读 2018-4-30 20:40 |个人分类:地理信息系统二次开发|系统分类:教学心得

 1、添加MapControl右键菜单

在主窗体中添加右键菜单窗体contextMenuStrip2,设计如下:


2、选择要素,可以点选,可以框选。

添加方法pointselectfeature()

public void pointselectfeature()
{
   IGeometry g = null;
   IEnvelope pEnv;
   IActiveView pActiveView = axMapControl1.ActiveView;
   IMap pMap = axMapControl1.Map;
   pEnv = axMapControl1.TrackRectangle();
   if (pEnv.IsEmpty == true)
   {
     ESRI.ArcGIS.esriSystem.tagRECT r;
     r.bottom = ed.y + 5;
     r.top = ed.y - 5;
     r.left = ed.x - 5;
     r.right = ed.x + 5;
     pActiveView.ScreenDisplay.DisplayTransformation.TransformRect(pEnv, ref r, 4);
     pEnv.SpatialReference = pActiveView.FocusMap.SpatialReference;
   }
   g = pEnv as IGeometry;
   axMapControl1.Map.SelectByShape(g, null, false);
   axMapControl1.Refresh(esriViewDrawPhase.esriViewGeoSelection, null, null);  
}

在MapControl右键的“选择要素”代码中,添加:

strOperType = "screenselect";

在之前我们定义的OperGeoMap()中,添加一个case,如果strOperType 为"screenselect",就运行pointselectfeature()。


3、在“图框属性”中添加如下代码:

private void 图框属性ToolStripMenuItem_Click(object sender, EventArgs e)
{
  ESRI.ArcGIS.Framework.IComPropertySheet PSheet;
  PSheet = new ESRI.ArcGIS.Framework.ComPropertySheet();
  ESRI.ArcGIS.esriSystem.UID pPPUID = new ESRI.ArcGIS.esriSystem.UIDClass();
  PSheet.AddCategoryID(pPPUID);
  //投影坐标系,有点bug,选了其他坐标系后,应用按钮,地图不刷新;这个页面也不刷新。
  ESRI.ArcGIS.Framework.IPropertyPage ProjectionPage = new ESRI.ArcGIS.CartoUI.MapProjectionPropPageClass();//坐标系
  PSheet.AddPage(ProjectionPage);
  //其他,自选添加
  ESRI.ArcGIS.Framework.IPropertyPage MapFramePage = new ESRI.ArcGIS.CartoUI.MapFramePropertyPageClass();
  PSheet.AddPage(MapFramePage);

  ESRI.ArcGIS.esriSystem.ISet pMySet = new ESRI.ArcGIS.esriSystem.SetClass();
  pMySet.Add(axMapControl1.Map);
  pMySet.Reset();
  PSheet.ActivePage = 0;
  bool bOK = PSheet.EditProperties(pMySet, 0);
  axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, axMapControl1.ActiveView.Extent);
}



4、同理,TOC右键菜单中,之前预留了一个“属性”,在其中输入如下代码:

private void 属性ToolStripMenuItem_Click(object sender, EventArgs e)
{
   ESRI.ArcGIS.Framework.IComPropertySheet pComPropSheet;
   pComPropSheet = new ESRI.ArcGIS.Framework.ComPropertySheet();
   pComPropSheet.Title = SelectedLayer_TOC.Name + " - 属性";
   ESRI.ArcGIS.esriSystem.UID pPPUID = new ESRI.ArcGIS.esriSystem.UIDClass();
   pComPropSheet.AddCategoryID(pPPUID);     // General....
   ESRI.ArcGIS.Framework.IPropertyPage pGenPage = new ESRI.ArcGIS.CartoUI.GeneralLayerPropPageClass();
   pComPropSheet.AddPage(pGenPage);
   // Source
   ESRI.ArcGIS.Framework.IPropertyPage pSrcPage = new ESRI.ArcGIS.CartoUI.FeatureLayerSourcePropertyPageClass();
   pComPropSheet.AddPage(pSrcPage);
   // Selection...
   ESRI.ArcGIS.Framework.IPropertyPage pSelectPage = new ESRI.ArcGIS.CartoUI.FeatureLayerSelectionPropertyPageClass();
   pComPropSheet.AddPage(pSelectPage);
   // Display....
   ESRI.ArcGIS.Framework.IPropertyPage pDispPage = new ESRI.ArcGIS.CartoUI.FeatureLayerDisplayPropertyPageClass();
   pComPropSheet.AddPage(pDispPage);
   // Symbology....
   ESRI.ArcGIS.Framework.IPropertyPage pDrawPage = new ESRI.ArcGIS.CartoUI.LayerDrawingPropertyPageClass();
   pComPropSheet.AddPage(pDrawPage);
   // Fields... 
   ESRI.ArcGIS.Framework.IPropertyPage pFieldsPage = new ESRI.ArcGIS.CartoUI.LayerFieldsPropertyPageClass();
   pComPropSheet.AddPage(pFieldsPage);
   // Definition Query... 
   ESRI.ArcGIS.Framework.IPropertyPage pQueryPage = new ESRI.ArcGIS.CartoUI.LayerDefinitionQueryPropertyPageClass();
   pComPropSheet.AddPage(pQueryPage);
   // Labels....
   ESRI.ArcGIS.Framework.IPropertyPage pSelPage = new ESRI.ArcGIS.CartoUI.LayerLabelsPropertyPageClass();
   pComPropSheet.AddPage(pSelPage);
   // Joins & Relates....
   ESRI.ArcGIS.Framework.IPropertyPage pJoinPage = new ESRI.ArcGIS.ArcMapUI.JoinRelatePageClass();
   pComPropSheet.AddPage(pJoinPage);
   // Setup layer link
   ESRI.ArcGIS.esriSystem.ISet pMySet = new ESRI.ArcGIS.esriSystem.SetClass();
   pMySet.Add(SelectedLayer_TOC);
   pMySet.Reset();
   // make the symbology tab active
   pComPropSheet.ActivePage = 4;
   // show the property sheet
   bool bOK = pComPropSheet.EditProperties(pMySet, 0);
   axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, axMapControl1.ActiveView.Extent);
   axTOCControl1.Update();
   axMapControl2.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
}




https://blog.sciencenet.cn/blog-3373120-1111711.html

上一篇:ArcGIS Engine二次开发学习(8)根据属性查询
下一篇:ArcGIS Engine二次开发学习(10)PageLayoutControl
收藏 IP: 58.244.72.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-24 01:17

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部