鼠标中键(滚轮)和axMapControl之间的交互
来源:互联网 发布:美国自费留学 知乎 编辑:程序博客网 时间:2024/05/16 11:36
ArcMap中对地图的浏览里,鼠标中键是一个非常重要的交互方式。它默认上滚缩小,下滚放大(与CAD相反,导致很多人不习惯),中键按下时可以对map进行平移操作。
在使用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(); } } }
0 0
- 鼠标中键(滚轮)和axMapControl之间的交互
- 让minigui的IAL支持鼠标中键滚轮事件
- QT5的鼠标事件和滚轮事件
- COOKIE和鼠标滚轮
- 鼠标滚轮的使用
- 7.6 鼠标的滚轮
- 7.6 鼠标的滚轮
- c# winform 用鼠标滚轮控制图片大小,获取鼠标中键滚轮事件,MouseWheel事件
- 鼠标事件-鼠标位置和鼠标滚轮
- 让Fedora 19支持ThinkPad鼠标中键和小红点实现滚轮效果
- Flex中鼠标滚轮响应
- 鼠标和滚轮方向判断
- 【91xcz】win7系统中“Ctrl+鼠标滚轮”组合键的妙用
- 解决DBGrid中关于鼠标滚轮的一种方法。
- silverlight中DataGrid如何处理鼠标的滚轮事件
- WINCE的MFC中处理鼠标滚轮消息
- 在Ubuntu中使用鼠标滚轮的配置
- map控件中对鼠标滚轮事件的响应
- Effective JavaScript Item 10 避免使用with
- Android - Error parsing "org.opencv.android.JavaCameraView" 问题
- 对Hashtable按照value进行排序
- 评论了iOS 5带来iPhone 4十大打手改进
- 评价最高的游戏和拼图2011年圣诞节
- 鼠标中键(滚轮)和axMapControl之间的交互
- 平台预览版的Internet Explorer 10发布
- HDOJ 题目4552怪盗基德的挑战书(字符串)
- 2013年山西国家司法考试真题
- LINUX内核内存屏障 (Documentation/memory-barriers.txt)
- Java使用Redis入门
- opengl简单的视角变换
- mysql分组后排序sql命令
- 10个C++11特性