当前位置:首页 >> 建筑/土木 >>

如何让ITool类工具在使用过程中实现鼠标中键平移地图


如何让 ITool 类工具在使用过程中实现鼠标中键平移地图

private IScreenDisplay m_focusScreenDisplay; private bool m_PanOperation; public esriMapViewer() { InitializeComponent(); } private { switch (e.button) { case 4: IPoint point = new PointClass(); point.PutCoords(e.mapX, e.mapY); m_focusScreenDisplay = axMapControl.ActiveView.ScreenDisplay; m_focusScreenDisplay.PanStart(point); m_PanOperation = true; if (axMapControl.CurrentTool == null) axMapControl.MousePointer esriControlsMousePointer.esriPointerHand; break; default: break; } } private { if (e.button == 4) { if (!m_PanOperation) return; IPoint point = new PointClass(); point.PutCoords(e.mapX, e.mapY); m_focusScreenDisplay.PanMoveTo(point); } } private { if (e.button == 4) void axMapControl_OnMouseUp(object sender, IMapControlEvents2_OnMouseUpEvent e) void axMapControl_OnMouseMove(object sender, IMapControlEvents2_OnMouseMoveEvent e) = void axMapControl_OnMouseDown(object sender,

IMapControlEvents2_OnMouseDownEvent e)

{ if (!m_PanOperation) return; IEnvelope extent = m_focusScreenDisplay.PanStop(); if (extent != null) { m_focusScreenDisplay.DisplayTransformation.VisibleBounds = extent; m_focusScreenDisplay.Invalidate(null, (short)esriScreenCache.esriAllScreenCaches); } m_PanOperation = false; if (axMapControl.CurrentTool == null) axMapControl.MousePointer esriControlsMousePointer.esriPointerDefault; } } = true,

言归正传,在 ArcMap 中,在使用工具如编辑工具进行点线面绘制时,也是可以通过中键来实现平移 的,这个需要一点点小技巧来实现,其实也简单,就是截获住中键事件,停止使用当前工具的相关操 作,并把当前鼠标样式变换到平移用的那只“小手”,下面以官方例子的 ZoomInTool 工具的实现代码为 例子,稍稍作了点修改,以达到本文的目的。继续贴代码: public sealed class esriMapZoomInToolClass : BaseTool { private IHookHelper m_hookHelper; private INewEnvelopeFeedback m_feedBack; private IPoint m_point; private Boolean m_isMouseDown; private bool m_changeCursor; public esriMapZoomInToolClass() { // // TODO: Define values for the public properties // base.m_category = ""; //localizable text base.m_caption = ""; base.m_message = ""; base.m_toolTip = ""; base.m_name "MyCategory_MyTool") try { // // TODO: change resource name if necessary = //localizable text //localizable text //localizable text ""; //unique id, non-localizable (e.g.

// //string bitmapResourceName = GetType().Name + ".bmp"; //base.m_bitmap = new Bitmap(GetType(), bitmapResourceName); base.m_cursor = new System.Windows.Forms.Cursor(GetType(), "Cursor.ZoomIn.cur"); } catch (Exception ex) { System.Diagnostics.Trace.WriteLine(ex.Message, "Invalid Bitmap"); } } #region Overriden Class Methods /// <summary> /// Occurs when this tool is created /// </summary> /// <param name="hook">Instance of the application</param> public override void OnCreate(object hook) { if (m_hookHelper == null) m_hookHelper = new HookHelperClass(); m_hookHelper.Hook = hook; // TODO: } /// <summary> /// Occurs when this tool is clicked /// </summary> public override void OnClick() { // TODO: Add esriMapZoomInToolClass.OnClick implementation } public override void OnMouseDown(int Button, int Shift, int X, int Y) { if (Button == 4) { base.m_cursor = new System.Windows.Forms.Cursor(GetType(), "Cursor.Hand.cur"); m_changeCursor = true; return; } if (m_changeCursor) { base.m_cursor = new System.Windows.Forms.Cursor(GetType(), "Cursor.ZoomIn.cur"); m_changeCursor = false; Add esriMapZoomInToolClass.OnCreate implementation

} if (Button != 1) return; // TODO: Add esriMapZoomInToolClass.OnMouseDown implementation m_point m_hookHelper.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y); m_isMouseDown = true; } public override void OnMouseMove(int Button, int Shift, int X, int Y) { if (Button == 4) { base.m_cursor = new System.Windows.Forms.Cursor(GetType(), "Cursor.Hand.cur"); m_changeCursor = true; return; } if (m_changeCursor) { base.m_cursor = new System.Windows.Forms.Cursor(GetType(), "Cursor.ZoomIn.cur"); m_changeCursor = false; } // TODO: Add esriMapZoomInToolClass.OnMouseMove implementation if (!m_isMouseDown) return; //Start an envelope feedback if (m_feedBack == null) { m_feedBack = new NewEnvelopeFeedbackClass(); m_feedBack.Display = m_hookHelper.ActiveView.ScreenDisplay; m_feedBack.Start(m_point); } //Move the envelope feedback IPoint m_feedBack.MoveTo(point); } public override void OnMouseUp(int Button, int Shift, int X, int Y) { if (Button == 4) { base.m_cursor = new System.Windows.Forms.Cursor(GetType(), "Cursor.Hand.cur"); m_changeCursor = true; return; point = m_hookHelper.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y); =

} if (m_changeCursor) { base.m_cursor = new System.Windows.Forms.Cursor(GetType(), "Cursor.ZoomIn.cur"); m_changeCursor = false; } // TODO: Add esriMapZoomInToolClass.OnMouseUp implementation if (!m_isMouseDown) return; //Get the focus map IActiveView pActiveView = (IActiveView)m_hookHelper.FocusMap; //If an envelope has not been tracked IEnvelope pEnvelope; if (m_feedBack == null) { //Zoom in from mouse click pEnvelope = pActiveView.Extent; pEnvelope.Expand(0.5, 0.5, true); pEnvelope.CenterAt(m_point); } else { //Stop the envelope feedback pEnvelope = m_feedBack.Stop(); //Exit if the envelope height or width is 0 if (pEnvelope.Width == 0 || pEnvelope.Height == 0) { m_feedBack = null; m_isMouseDown = false; } } //Set the new extent pActiveView.Extent = pEnvelope; //Refresh the active view pActiveView.Refresh(); m_feedBack = null; m_isMouseDown = false; } public override void Refresh(int hDC) { if (m_feedBack != null) m_feedBack.Refresh(hDC); base.Refresh(hDC); } #endregion


相关文章:
开发指南--百度地图JavaScript API大众版
(支持 2D 图、3D 图、卫星图)、平移、缩放、拖拽...地图控件展示功能:可以在地图上添加/删除鹰眼、工具...script>标签 API 引用到页面中: 使用 V1.4 及...
高德地图API类参考
类地图对象类,封装了地图显示、交互等操作方法。 ...默认值为 false 地图是否可通过鼠标拖拽平移,默认为...完成某些地图功能, 比如鼠标工具 (MouseTool) 等。...
浅谈电子地图的应用现状及发展前景
并且电子地图很容易实现“漫游”和“平移”, 能一次性容纳一个地区的所有地图...电子地图使用者在不断与计算机的对话过程中动态生成的, 使 用者可以指定地图...
基于WebGIS的校园电子地图的设计与实现
线路交叉分布,这些信息常规的管理方法难以实现有效...左、右平移功能,这样就可以一幅地图全部浏览到。...ArcIMS 作为与 ArcGIS9.2 配套的用户开 发工具。在...
使用VC++开发基于ArcEngine的三维管线距离分析组件
按一定的规则制作的(ICommand/ITool 接口的实现), 主控件的特定事件(如鼠标、键盘事件)调用 工具里对应的方法,再通过其 他组件共同协作,即可完成各种地图操作...
电子地图技术分析
传输和分析工具的作用,因此它又引起地图使用方式的...“平移”等功能,可以实现地图无级缩放,即小可“细...在欧洲 ITS 的发展过程中,出现了“ITS 服务”这个...
地图配准方法研究
地图之前,主要是对地图进行坐标和投影的校正,使地图...配准操作工具栏的配准方法下拉列表框中选择一种方法...(5)平移 操作:点击配准操作工具栏上的平移按钮,...
itool使用教程
itool使用教程_计算机软件及应用_IT/计算机_专业资料...第四是非常重要的,在这里可以导入地图包、导入电影...9. 第九可以查找设备中的应用。 手机上的应用...
百度MAPAPI
比如当您要使用 Map 类时,在代码中需要添加 命名...PgUp、PgDn、 Home 和 End 键会使地图平移其 1/...infoWindowOffset Size PushpinTool 类此类表示标注工具...
GIS实习报告_图文
快捷键 设计、 工具栏设计 加载地图、 浮动加 载...ITool; } 查询显示图层: 在 MapControl 事件中的 ...设置缓冲区半径,点击“分析 6、鹰眼的实现 private ...
更多相关标签: