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();}}}

鼠标中键(滚轮)和axMapControl之间的交互相关推荐

  1. etcd 笔记(05)— etcd 代码结构、各模块功能、整体架构、各模块之间的交互、请求和应答流程

    1. etcd 项目结构和功能 etcd 项目代码的目录结构如下: $ tree ├── auth ├── build ├── client ├── clientv3 ├── contrib ├── ...

  2. 【面向对象编程】(3) 类之间的交互,依赖关系,关联关系

    各位同学好,今天和大家分享一下面向对象编程中,类之间的交互,类之间的依赖关系和关联关系.有不明白的可见前一章节:https://blog.csdn.net/dgvv4/article/details/ ...

  3. 020_Vue非父子组件之间数据交互

    1. 非父子组件之间数据交互 1.1. 单独的事件中心管理组件间的通信 var eventHub = new Vue(); 1.2. 监听事件 eventHub.$on('event-name', f ...

  4. Salesforce视图与控制器之间的交互

    刚接触Salesforce,过程的确是比较艰难了,中文资料几乎没有,看英文资料学的效率却不高,不过看了一段时间的英文资料发现自己英语水平挺高不少啊,现在看都不用工具翻译,早知道就再次尝试报个6级,看下 ...

  5. python基础教程:对象之间的交互

    先看看一般的类定义如下: class 类名:def __init__(self,参数1,参数2):self.对象的属性1 = 参数1self.对象的属性2 = 参数2def 方法名(self):pas ...

  6. Mui --- app与服务器之间的交互原理、mui ajax使用

    1.APP与服务器之间的交互原理app端(客户端)与服务端的交互其实理解起来和容易,客户端想服务器端发送请求,服务器端进行数据运算后返回最终结果.结果可以是多种格式: 1.text 文本格式 2.xm ...

  7. 协调多个对象之间的交互——中介者模式

    本文转载自 :http://blog.csdn.net/lovelion/article/details/8482952 腾讯公司推出的QQ作为一款免费的即时聊天软件深受广大用户的喜爱,它已经成为很多 ...

  8. python与excel互通_【python】python vs Excel ( 与mysql数据库之间的交互)

    [python]python vs Excel ( 与mysql数据库之间的交互) 通过python与mysql数据库做交互 到目前为止大部分案例的演示数据都是基于文件进行读取的.那么python如何 ...

  9. 从功能层次,阐述CPU、接口和外设之间的交互

    我们从功能抽象层次,阐述一下CPU.接口芯片和外设之间的交互情况: 三个器件 4个箭头 我们依次将其描述清楚. 数据 箭头①和③ CPU给接口可以发送数据,然后接口暂存数据,之后再发给外设,这就是数据 ...

最新文章

  1. Delphi 与 DirectX 之 DelphiX(77): TDIB.Distort();
  2. DAC7612的使用
  3. 在IE右键菜单,添加图片保存快捷方式
  4. php遍历指定目录中的内容2
  5. XML CDATA的作用
  6. 气温常年在25度的地方_最低调的海滨城市,物价便宜,常年25度,沙滩细白,不输三亚!...
  7. QPW 点评表(tf_appraise)
  8. 比赛正式开始的openeim001
  9. iOS UISegmentedControl
  10. jQuery - 按回车键触发跳转
  11. 3dMax模型尺寸更改与模型均匀缩放
  12. Mac安装Octave
  13. 【HDU1277】全文检索(ac自动机/字典树)
  14. 对springboot整合mybatis -- 不一样的看法
  15. 怎样下载最新的SCI/SSCI/EI目录期刊列表?
  16. java web运行网址_猫哥带你去战斗——Java Web开发——网页篇[0]——第一个网页,第一次访问...
  17. 【go-zero】go-zero 敏感词过滤 整合 开源过滤敏感词插件 sensitive
  18. C++贪心算法之最小新整数
  19. Red Hat Enterprise Linux 7.3
  20. matlab怎么画碎石图,成分分析中biplot函数不理解_主成分分析

热门文章

  1. css3动画实现3d旋转效果
  2. 推荐1个视频播放画中画工具!
  3. C/C++动态申请空间方式
  4. 欧文分校计算机科学硕士项目,美国加州大学欧文分校信息与计算机科学硕士.pdf...
  5. 使用SPSS进行曲线估算分析
  6. Android系统编译小总结
  7. C#操作Excel(三)相关函数
  8. 【BZOJ3470】Freda’s Walk
  9. 将ip地址转换成一个长整型(日志处理)
  10. 运维工程师主要做什么_弱电工程IT运维工作到底是做什么的?