我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

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

下载Word文档

猜你喜欢

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

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

如何实现右键菜单中添加打开MS-DOS的批处理bat

小编给大家分享一下如何实现右键菜单中添加打开MS-DOS的批处理bat,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!reg add "HKCR\*\shell\m
2023-06-09

PouchContainer CRI的设计与实现方法是怎样的

PouchContainer CRI的设计与实现方法是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。  1. CRI简介  在每个Kubernetes节点
2023-06-03

Hybris Enterprise Commerce Platform 服务层的设计与实现是怎样的

本篇文章给大家分享的是有关Hybris Enterprise Commerce Platform 服务层的设计与实现是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。我们来
2023-06-02

PHP中利用路由模块实现RESTful API的设计与开发

随着互联网的不断发展,基于Web的应用程序越来越多,而REST (Representational State Transfer) 接口已经成为设计和开发Web服务的常见方法。在PHP中,实现RESTful API可以通过路由模块来简化开发
2023-10-21

基于SSM试卷自动生成系统设计与实现是怎样的

这篇文章将为大家详细讲解有关基于SSM试卷自动生成系统设计与实现是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。功能点: 1.后台管理员能够对用户管理,用户批量导入,用户组管理,角色管
2023-06-02

实时战斗系统在游戏开发中的设计与实现(如何实现紧张刺激的实时战斗系统?)

实时战斗系统是游戏核心要素,需要考虑输入、角色、环境、敌人、游戏节奏。设计时注重流畅输入、多样化角色、动态环境、智能化AI和快速节奏。实现方面,降低输入延迟、创建流畅动画、完善AI行为树、应用物理碰撞检测和优化音频设计至关重要。持续收集反馈、测试和分析数据,不断改进和优化系统,提升玩家体验。
实时战斗系统在游戏开发中的设计与实现(如何实现紧张刺激的实时战斗系统?)
2024-04-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录