iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >ArcEngine开发中右键菜单的设计与实现是怎样的
  • 123
分享到

ArcEngine开发中右键菜单的设计与实现是怎样的

2023-06-17 12:06:14 123人浏览 八月长安
摘要

ArcEngine开发中右键菜单的设计与实现是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。利用ArcGIS Engine开发自定义GIS应用程序中,一般有两种方式来

ArcEngine开发中右键菜单的设计与实现是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

利用ArcGIS Engine开发自定义GIS应用程序中,一般有两种方式来建立右键菜单。

一是利用开发工具自带的右键菜单控件,如Visual Studio中的ContextMenuStrip控件;

二是利用ArcGIS Engine封装好的IToolbarMenu接口。相比较而言,前者实现起来较简单,但后者使程序具有更好的面向对象性,也更利于扩展,在大型系统中,使用该方法是较好的选择。

详细讲述如何利用IToolbarMenu接口实现右键菜单功能。

设计程序主界面如下图所示:

ArcEngine开发中右键菜单的设计与实现是怎样的

在FrmMain类中首先定义如下指针:

private ITOCControl2 pTocControl;   private IMapControl3 pMapControl;   private IToolbarMenu pToolMenuMap;   private IToolbarMenu pToolMenuLayer;

在FrmMain窗体的加载事件中初始化这些指针:

// 取得 MapControl 和 PageLayoutControl 的引用   pTocControl = (ITOCControl2)axTOCControl1.Object;   pMapControl = (IMapControl3)axMapControl1.Object;   // 创建菜单   pToolMenuMap = new ToolbarMenuClass();   pToolMenuLayer = new ToolbarMenuClass();

如此便建立了新的菜单,但其中没有实际的菜单项,具体的命令或者工具必须作为菜单项添加到菜单中才能实现相应的功能。

在添加菜单项之前,得先实现相应命令或工具。下面自定义一个缩放至图层的命令,添加一个类ZoomToLayer.cs至该项目,继承自ESRI.ArcGIS.ADF.BaseClasses.BaseCommand。BaseCommand是一个抽象类,它为开发人员建立自定义命令项提供了一种有效的途径。重写基类的OnCreate和OnClick方法,实现缩放图层至完整的显示于地图控件中。完整代码如下。

using System;   using System.Collections.Generic;   using System.Text;   using ESRI.ArcGIS.ADF.BaseClasses;   using ESRI.ArcGIS.Carto;   using ESRI.ArcGIS.Controls;   namespace ArcEngine3_3   {   class ZoomToLayer : BaseCommand   {   //定义指针   private IMapControl3 pMapControl;   public ZoomToLayer()   {   base.m_caption = "放大至该图层";   }   //重写BaseCommand基类的虚拟方法OnClick()   public override void OnClick()   {   ILayer pLayer = (ILayer)pMapControl.CustomProperty;   pMapControl.Extent = pLayer.AreaOfInterest;   }   //重写BaseCommand基类的抽象方法OnCreate(object hook)   public override void OnCreate(object hook)   {   pMapControl = (IMapControl3)hook;   }   }   }

除自定义实现命令或者工具之外, ArcGIS Engine内置了许多可以直接调用的常用命令和工具,如ControlsADDDataCommandClass、ControlsClearSelectionCommandClass等,也可以直接调用AE内置的菜单,如ControlsFeatureSelectionMenu。

建立好自定义命令或工具后,就可以向菜单中添加对应的菜单项了。在FrmMain窗体的加载事件中添加菜单项。

pToolMenuLayer.AddItem(new ZoomToLayer(), -1, 0, true, esriCommandStyles.esriCommandStyleTextOnly);

设置菜单的hook

pToolMenuLayer.SetHook(pMapControl);

现在有了菜单,需要在TocControl中右键弹出,所以在其OnMouseDown/OnMouseUp事件中获取鼠标点击信息,然后弹出对应菜单即可。

//获取鼠标点击信息   axTOCControl1.HitTest(e.x, e.y, ref pTocItem, ref pBasicMap, ref pLayer, ref oLegendGroup, ref oIndex);   if (e.button == 2)   {   if (pTocItem == esriTOCControlItem.esriTOCControlItemMap)   {   pTocControl.SelectItem(pBasicMap, null);   }   else   {   pTocControl.SelectItem(pLayer, null);   }   //设置CustomProperty为layer (用于自定义的Layer命令)   pMapControl.CustomProperty = pLayer;   //弹出右键菜单   if (pTocItem == esriTOCControlItem.esriTOCControlItemMap)   {   pToolMenuMap.PopupMenu(e.x, e.y, pTocControl.hWnd);   }   else   {   pToolMenuLayer.PopupMenu(e.x, e.y, pTocControl.hWnd);   }   }

用同样的方法可以为TocControl中的地图、图层、符号以及为MapControl等添加各自的右键菜单。最终实现效果如下。

ArcEngine开发中右键菜单的设计与实现是怎样的

关于ArcEngine开发中右键菜单的设计与实现是怎样的问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网精选频道了解更多相关知识。

--结束END--

本文标题: ArcEngine开发中右键菜单的设计与实现是怎样的

本文链接: https://www.lsjlt.com/news/289321.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • ArcEngine开发中右键菜单的设计与实现是怎样的
    ArcEngine开发中右键菜单的设计与实现是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。利用ArcGIS Engine开发自定义GIS应用程序中,一般有两种方式来...
    99+
    2023-06-17
  • 如何实现右键菜单中添加打开MS-DOS的批处理bat
    小编给大家分享一下如何实现右键菜单中添加打开MS-DOS的批处理bat,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!reg add "...
    99+
    2023-06-09
  • PouchContainer CRI的设计与实现方法是怎样的
    PouchContainer CRI的设计与实现方法是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。  1. CRI简介  在每个Kubernetes节点...
    99+
    2023-06-03
  • Hybris Enterprise Commerce Platform 服务层的设计与实现是怎样的
    本篇文章给大家分享的是有关Hybris Enterprise Commerce Platform 服务层的设计与实现是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。我们来...
    99+
    2023-06-02
  • PHP商城开发中的现金券系统设计与实现
    随着互联网的快速发展,电商行业也逐渐成为了人们消费的主要渠道之一。越来越多的企业开始将目光投向电商行业,而对于电商平台而言,现金券成为了吸引用户的重要手段之一。其中,PHP商城开发中的现金券系统设计与实现尤为重要。本文将从现金券的定义、现金...
    99+
    2023-05-24
    商城开发 PHP实现 现金券
  • PHP中利用路由模块实现RESTful API的设计与开发
    随着互联网的不断发展,基于Web的应用程序越来越多,而REST (Representational State Transfer) 接口已经成为设计和开发Web服务的常见方法。在PHP中,实现RESTful API可以通过路由模块来简化开发...
    99+
    2023-10-21
    PHP RESTful API 路由模块
  • 基于SSM试卷自动生成系统设计与实现是怎样的
    这篇文章将为大家详细讲解有关基于SSM试卷自动生成系统设计与实现是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。功能点: 1.后台管理员能够对用户管理,用户批量导入,用户组管理,角色管...
    99+
    2023-06-02
  • PHP商城开发中的多店铺销售系统设计与实现
    随着电子商务的不断发展,越来越多的企业开始转向线上销售。然而,针对不同区域、不同人群进行精细化管理和销售仍然是一件棘手的事情。因此,多店铺销售系统成为了许多企业在电商领域的必备之选。在本文中,我将介绍一种基于PHP的多店铺销售系统的设计与实...
    99+
    2023-05-21
    实现 PHP商城开发 多店铺销售系统设计
  • PHP商城开发中的供应链管理系统设计与实现
    PHP商城开发中的供应链管理系统设计与实现随着电子商务的快速发展,网络购物已经成为人们生活中的一部分。作为一项复杂的商业活动,电子商务不仅涉及到产品的销售,还需要考虑到供应链的管理问题。供应链管理是对供应商、制造商、批发商、零售商等所有参与...
    99+
    2023-05-23
    供应链管理 PHP商城 系统设计
  • DB分库分表中关于使用框架还是自主开发以及sharding实现层面的考量是怎样的
    这篇文章将为大家详细讲解有关DB分库分表中关于使用框架还是自主开发以及sharding实现层面的考量是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。当...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作