鼠标中键(滚轮)和axMapControl之间的交互
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之间的交互相关推荐
- etcd 笔记(05)— etcd 代码结构、各模块功能、整体架构、各模块之间的交互、请求和应答流程
1. etcd 项目结构和功能 etcd 项目代码的目录结构如下: $ tree ├── auth ├── build ├── client ├── clientv3 ├── contrib ├── ...
- 【面向对象编程】(3) 类之间的交互,依赖关系,关联关系
各位同学好,今天和大家分享一下面向对象编程中,类之间的交互,类之间的依赖关系和关联关系.有不明白的可见前一章节:https://blog.csdn.net/dgvv4/article/details/ ...
- 020_Vue非父子组件之间数据交互
1. 非父子组件之间数据交互 1.1. 单独的事件中心管理组件间的通信 var eventHub = new Vue(); 1.2. 监听事件 eventHub.$on('event-name', f ...
- Salesforce视图与控制器之间的交互
刚接触Salesforce,过程的确是比较艰难了,中文资料几乎没有,看英文资料学的效率却不高,不过看了一段时间的英文资料发现自己英语水平挺高不少啊,现在看都不用工具翻译,早知道就再次尝试报个6级,看下 ...
- python基础教程:对象之间的交互
先看看一般的类定义如下: class 类名:def __init__(self,参数1,参数2):self.对象的属性1 = 参数1self.对象的属性2 = 参数2def 方法名(self):pas ...
- Mui --- app与服务器之间的交互原理、mui ajax使用
1.APP与服务器之间的交互原理app端(客户端)与服务端的交互其实理解起来和容易,客户端想服务器端发送请求,服务器端进行数据运算后返回最终结果.结果可以是多种格式: 1.text 文本格式 2.xm ...
- 协调多个对象之间的交互——中介者模式
本文转载自 :http://blog.csdn.net/lovelion/article/details/8482952 腾讯公司推出的QQ作为一款免费的即时聊天软件深受广大用户的喜爱,它已经成为很多 ...
- python与excel互通_【python】python vs Excel ( 与mysql数据库之间的交互)
[python]python vs Excel ( 与mysql数据库之间的交互) 通过python与mysql数据库做交互 到目前为止大部分案例的演示数据都是基于文件进行读取的.那么python如何 ...
- 从功能层次,阐述CPU、接口和外设之间的交互
我们从功能抽象层次,阐述一下CPU.接口芯片和外设之间的交互情况: 三个器件 4个箭头 我们依次将其描述清楚. 数据 箭头①和③ CPU给接口可以发送数据,然后接口暂存数据,之后再发给外设,这就是数据 ...
最新文章
- Delphi 与 DirectX 之 DelphiX(77): TDIB.Distort();
- DAC7612的使用
- 在IE右键菜单,添加图片保存快捷方式
- php遍历指定目录中的内容2
- XML CDATA的作用
- 气温常年在25度的地方_最低调的海滨城市,物价便宜,常年25度,沙滩细白,不输三亚!...
- QPW 点评表(tf_appraise)
- 比赛正式开始的openeim001
- iOS UISegmentedControl
- jQuery - 按回车键触发跳转
- 3dMax模型尺寸更改与模型均匀缩放
- Mac安装Octave
- 【HDU1277】全文检索(ac自动机/字典树)
- 对springboot整合mybatis -- 不一样的看法
- 怎样下载最新的SCI/SSCI/EI目录期刊列表?
- java web运行网址_猫哥带你去战斗——Java Web开发——网页篇[0]——第一个网页,第一次访问...
- 【go-zero】go-zero 敏感词过滤 整合 开源过滤敏感词插件 sensitive
- C++贪心算法之最小新整数
- Red Hat Enterprise Linux 7.3
- matlab怎么画碎石图,成分分析中biplot函数不理解_主成分分析