鼠标中键(滚轮)和axMapControl之间的交互
2014-09-04 17:06
323 查看
ArcMap中对地图的浏览里,鼠标中键是一个非常重要的交互方式。它默认上滚缩小,下滚放大(与CAD相反,导致很多人不习惯),中键按下时可以对map进行平移操作。
在使用AE开发时,也希望实现类似的功能,同时,需要重载滚轮的功能,保证上滚放大,下滚缩小。
在参考(实现mapControl的滚轮缩放反效果)后,实现代码如下:
在使用AE开发时,也希望实现类似的功能,同时,需要重载滚轮的功能,保证上滚放大,下滚缩小。
在参考(实现mapControl的滚轮缩放反效果)后,实现代码如下:
public partial class MainFrame : Form { IEnvelope mEnvelope = null; IPoint mPoint = new PointClass();//缩放中心点 IPoint mousePoint = null;//鼠标点击点 IPoint startPnt = new PointClass(); public MainFrame() { InitializeComponent(); panel1.MouseWheel += new MouseEventHandler(panel1_MouseWheel); axMapControl1.AutoMouseWheel = false; //禁止axMapControl使用滚轮 mEnvelope = axMapControl1.ActiveView.Extent; mPoint.X = (mEnvelope.XMax + mEnvelope.XMin) / 2; mPoint.Y = (mEnvelope.YMax + mEnvelope.YMin) / 2; } void panel1_MouseWheel(object sender, MouseEventArgs e) { mousePoint = axMapControl1.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(e.X, e.Y); double moveDisX = mousePoint.X - (mEnvelope.XMax + mEnvelope.XMin) / 2; double moveDisY = mousePoint.Y - (mEnvelope.YMax + mEnvelope.YMin) / 2; mEnvelope.CenterAt(mousePoint); if (e.Delta > 0) { mEnvelope.Width = mEnvelope.Width * 0.8; mEnvelope.Height = mEnvelope.Height * 0.8; mPoint.X = mousePoint.X - moveDisX * 0.8; mPoint.Y = mousePoint.Y - moveDisY * 0.8; } else if (e.Delta < 0) { mEnvelope.Width = mEnvelope.Width * 1.25; mEnvelope.Height = mEnvelope.Height * 1.25; mPoint.X = mousePoint.X - moveDisX * 1.2; mPoint.Y = mousePoint.Y - moveDisY * 1.2; } mEnvelope.CenterAt(mPoint); axMapControl1.ActiveView.Extent = mEnvelope; axMapControl1.ActiveView.Refresh(); } private void axMapControl1_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e) { if (e.button == 4) {//中键按下时,记住按下点的位置 startPnt.X = axMapControl1.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(e.x, e.y).X; startPnt.Y = axMapControl1.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(e.x, e.y).Y; mEnvelope = axMapControl1.ActiveView.Extent; mPoint.X = (mEnvelope.XMax + mEnvelope.XMin) / 2; mPoint.Y = (mEnvelope.YMax + mEnvelope.YMin) / 2; } } private void axMapControl1_OnMouseMove(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseMoveEvent e) { if(e.button==4) { //鼠标中键按下且拖动时 this.Cursor = System.Windows.Forms.Cursors.SizeAll; mousePoint = axMapControl1.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(e.x, e.y); double moveDisX = mousePoint.X - startPnt.X; double moveDisY = mousePoint.Y - startPnt.Y; mPoint.X = mPoint.X - moveDisX; mPoint.Y = mPoint.Y - moveDisY; mEnvelope.CenterAt(mPoint); axMapControl1.ActiveView.Extent = mEnvelope; axMapControl1.ActiveView.Refresh(); } } }
相关文章推荐
- ArcEngine中实现axMapControl控件鼠标左击右击响应不同事件
- C#:为PrintPreviewControl加上鼠标滚轮支持和鼠标拖动预览页支持
- angularJS-指令与控制器之间的交互--“鼠标经过事件”如图所示
- SceneControl+AE+鼠标滚轮缩放
- axMapControl.AddShapeFile The specified path is invalid
- AE开发,有几个点,已知X,Y坐标,如何在AxMapControl中显示这些点
- 在类中调用axmapcontrol的属性进行一些编程
- Axcontrols与controls的区别、axmapcontrol与maptcontrol的区别
- "类型同时存在于ESRI.ArcGIS.AxMapControl.dll和ESRI.ArcGIS.MapControl.dll中"的错误
- AE二次开发中,AxMapControl中地图复制到AxPageLayout控件中的代码
- axmapcontrol和mapcontrol有什么区别呢(转发)
- AE二次开发中,AxMapControl中地图复制到AxPageLayout控件中的代码
- AxMapControl和MapControl的区别【转】
- arcmap以及arcgis server中mapcontrol里图层加载顺序与空间参考之间的关系
- AE自定义工具时通过hook获取axMapControl
- System.Windows.Forms.AxHost+InvalidActiveXStateException thrown by ESRI.ArcGIS.AxMapControl
- ArcEngine在AxMapControl上绘制
- vs2003转vs2005(C#),ArcEngine报事件同时存在于AxMapControl,MapControl出错(转)
- axmapcontrol的一点发现
- arcengine中按照图层名查询axMapControl和axPageLayoutControl中图层