77范文网 - 专业文章范例文档资料分享平台

ArcGIS Engine控件编程(8)

来源:网络收集 时间:2019-04-02 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

using System; using System.Drawing;

using System.Runtime.InteropServices; using ESRI.ArcGIS.ADF.BaseClasses; using ESRI.ArcGIS.Controls; using ESRI.ArcGIS.Carto; namespace AppGIS1 {

public sealed class ClearFeaSele : BaseCommand {

private IHookHelper m_hookHelper;

public ClearFeaSele() {

//改变继承类的属性

base.m_category = \; base.m_caption = \清除当前地图选择要素\; base.m_message = \清除当前地图选择要素\; base.m_toolTip = \清除当前地图选择要素\; base.m_name = \清除当前地图选择要素\; try {

//设置命令的图标

string bitmapResourceName = GetType().Name + \; base.m_bitmap = new Bitmap(GetType(), bitmapResourceName); }

catch (Exception ex) {

System.Diagnostics.Trace.WriteLine(ex.Message, \); } }

#region Overriden Class Methods

public override void OnCreate(object hook) {

if (hook == null) return;

if (m_hookHelper == null)

m_hookHelper = new HookHelperClass(); //将mapControl作为钩子传递 m_hookHelper.Hook = hook; }

public override void OnClick() {

m_hookHelper.FocusMap.ClearSelection();

//获取焦点地图的IActiveView接口

IActiveView pActiveView = (IActiveView)m_hookHelper.FocusMap; pActiveView.Refresh(); }

#endregion } }

2.6.3 自定义开发工具

自定义工具的开发需继承基类BaseTool,在类的构造函数中,需对自定义工具进行初始化。因工具需要鼠标与地图类控件(MapControl、PageLayoutControl等)进行交互,以完成某个特定功能。除需重写OnCreate()方法外,还要根据具体情况重写其它方法,如OnMouseDown()、OnMouseMove()和OnMouseUp()等。下例通过开发实现地图缩小的ZoomOut工具进行举例说明。基本步骤如下:

(1)建立新类MapZoomOutTool,需要继承BaseTool基类,如下图所示。在随后弹出的对话框中仍然选择MapControl or PageLayoutControl Tool选项。

图 自定义工具类继承BaseTool基类

(2)在类中需要判断用户是点击缩小还是拉框缩小,具体实现代码如下:

using System.Runtime.InteropServices; using ESRI.ArcGIS.ADF.CATIDs; using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Controls; using ESRI.ArcGIS.esriSystem; using ESRI.ArcGIS.Geometry; using ESRI.ArcGIS.ADF.BaseClasses; using ESRI.ArcGIS.ADF; using ESRI.ArcGIS.Display;

public sealed class MapZoomOutTool : BaseTool {

private INewEnvelopeFeedback m_feedBack; private IPoint m_point; private Boolean m_isMouseDown;

private IHookHelper m_HookHelper = new HookHelperClass(); public MapZoomOutTool() {

//设置command属性 base.m_caption = \缩小\; base.m_message = \缩小\; base.m_toolTip = \缩小\; base.m_name = \缩小\;

base.m_category = \;

base.m_bitmap = new System.Drawing.Bitmap(string.Format(\软件开发统一图标\\\\ForStockIcon\\\\ZoomOut.bmp\,Application.StartupPath));

base.m_cursor = new System.Windows.Forms.Cursor(string.Format(\软件开发统一图标\\\\ForStockIcon\\\\ZoomOut.cur\,Application.StartupPath)); }

public override void OnCreate(object hook) {

m_HookHelper.Hook = hook; }

public override bool Enabled { get {

if (m_HookHelper.FocusMap == null) return false; return true; } }

public override void OnMouseDown(int button, int shift, int x, int y) {

if (m_HookHelper.ActiveView == null) return; //如果是视图

if (m_HookHelper.ActiveView is IActiveView) {

//图上创建一个点 IPoint pPoint =

(IPoint)m_HookHelper.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(x, y); //得到地图框

IMap pMap = m_HookHelper.ActiveView.HitTestMap(pPoint); if (pMap == null) return;

if (pMap != m_HookHelper.FocusMap)

{

m_HookHelper.ActiveView.FocusMap = pMap;

m_HookHelper.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null); } }

//在焦点图上创建一个点

IActiveView pActiveView = (IActiveView)m_HookHelper.FocusMap;

m_point = pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(x, y); m_isMouseDown = true; }

public override void OnMouseMove(int button, int shift, int x, int y) {

if (!m_isMouseDown) return; //得到焦点图

IActiveView pActiveView = (IActiveView)m_HookHelper.FocusMap; //初始一个范围

if (m_feedBack == null) {

m_feedBack = new NewEnvelopeFeedbackClass(); m_feedBack.Display = pActiveView.ScreenDisplay; m_feedBack.Start(m_point); }

base.m_cursor = new System.Windows.Forms.Cursor(string.Format(\软件开发统一图标\\\\ForStockIcon\\\\MoveZoomOut.cur\,Application.StartupPath)); //画范围

m_feedBack.MoveTo(pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(x, y)); }

public override void OnMouseUp(int button, int shift, int x, int y) {

base.m_cursor = new System.Windows.Forms.Cursor(string.Format(\软件开发统一图标\\\\ForStockIcon\\\\ZoomOut.cur\,Application.StartupPath)); if (!m_isMouseDown) return; IEnvelope pEnvelope; IEnvelope pFeedEnvelope; double newWidth, newHeight; //得到焦点图

IActiveView pActiveView = (IActiveView)m_HookHelper.FocusMap; //如果不画范围

if (m_feedBack == null) {

//点击缩小当前范围

pEnvelope = pActiveView.Extent; pEnvelope.Expand(1.5, 1.5, true); pEnvelope.CenterAt(m_point);

} else {

//停止画框

pFeedEnvelope = m_feedBack.Stop();

if (pFeedEnvelope.Width == 0 || pFeedEnvelope.Height == 0) {

m_feedBack = null; m_isMouseDown = false; }

newWidth = pActiveView.Extent.Width * (pActiveView.Extent.Width / pFeedEnvelope.Width);

newHeight = pActiveView.Extent.Height * (pActiveView.Extent.Height / pFeedEnvelope.Height);

//建立新的范围坐标

pEnvelope = new EnvelopeClass();

pEnvelope.PutCoords(pActiveView.Extent.XMin - ((pFeedEnvelope.XMin - pActiveView.Extent.XMin) * (pActiveView.Extent.Width / pFeedEnvelope.Width)), pActiveView.Extent.YMin - ((pFeedEnvelope.YMin - pActiveView.Extent.YMin) * (pActiveView.Extent.Height / pFeedEnvelope.Height)), (pActiveView.Extent.XMin - ((pFeedEnvelope.XMin -

pActiveView.Extent.XMin) * (pActiveView.Extent.Width / pFeedEnvelope.Width))) + newWidth, (pActiveView.Extent.YMin - ((pFeedEnvelope.YMin -

pActiveView.Extent.YMin) * (pActiveView.Extent.Height / pFeedEnvelope.Height))) + newHeight); }

//建立新的视图范围

pActiveView.Extent = pEnvelope; pActiveView.Refresh(); m_feedBack = null; m_isMouseDown = false; } }

2.6.4 自定菜单开发实例

在ToolbarControl上不仅可以驻留命令和工具,还可以驻留菜单条。要在工具条上驻留菜单条,首先需要实现IMenuDef接口,在工具条上实现菜单功能,还需要将菜单中的所有命令类组织在一个项目文件(DLL)中,再在其它项目中添加该项目的引用。下面通过举例,将地图符号化的6个命令类和实现IMenuDef接口的类SymbologyMenu组织在一个项目Symbology中。

本实例将自定义下拉菜单和六种符号化的方法封装在了一个DLL中,并在新建的工程中引用封装好的DLL,具体步骤如下:

(1)新建DLL文件。打开VS2008,选择新建项目对话框中的“类库”,如下图所示,输入一个项目名,点击“确定”。

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库ArcGIS Engine控件编程(8)在线全文阅读。

ArcGIS Engine控件编程(8).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/568075.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: