在axMapControl默认是可以实现滚轮缩放:前滚缩小,后滚放大。但是如果要实现前滚放大,后滚缩小的效果该怎么办?
查看了AE的资料以后,发现ESRI并没有提供实现滚轮滚动这一事件。
public event IMapControlEvents2_Ax_OnAfterDrawEventHandler OnAfterDraw;
public event IMapControlEvents2_Ax_OnAfterScreenDrawEventHandler OnAfterScreenDraw;
public event IMapControlEvents2_Ax_OnBeforeScreenDrawEventHandler OnBeforeScreenDraw;
public event IMapControlEvents2_Ax_OnDoubleClickEventHandler OnDoubleClick;
public event IMapControlEvents2_Ax_OnExtentUpdatedEventHandler OnExtentUpdated;
public event IMapControlEvents2_Ax_OnFullExtentUpdatedEventHandler OnFullExtentUpdated;
public event IMapControlEvents2_Ax_OnKeyDownEventHandler OnKeyDown;
public event IMapControlEvents2_Ax_OnKeyUpEventHandler OnKeyUp;
public event IMapControlEvents2_Ax_OnMapReplacedEventHandler OnMapReplaced;
public event IMapControlEvents2_Ax_OnMouseDownEventHandler OnMouseDown;
public event IMapControlEvents2_Ax_OnMouseMoveEventHandler OnMouseMove;
public event IMapControlEvents2_Ax_OnMouseUpEventHandler OnMouseUp;
public event IMapControlEvents2_Ax_OnOleDropEventHandler OnOleDrop;
public event EventHandler OnSelectionChanged;
public event IMapControlEvents2_Ax_OnViewRefreshedEventHandler OnViewRefreshed;
大家有什么方法可以实现这一功能呢?欢迎交流。下面说一下暂时的解决方法:
借助panel的事件实现,将axmapcontrol填充在一个panel里。
public partial class Form1 : Form { IEnvelope mEnvelope = null; IPoint mPoint = new PointClass();//缩放中心点 IPoint mousePoint = null;//鼠标位置点 public Form1() { InitializeComponent(); panel1.MouseWheel += new MouseEventHandler(panel1_MouseWheel); axMapControl1.AutoMouseWheel = false; 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.25; mPoint.Y = mousePoint.Y - moveDisY * 1.25; } mEnvelope.CenterAt(mPoint); axMapControl1.ActiveView.Extent = mEnvelope; axMapControl1.ActiveView.Refresh(); }
注解:上面缩放前后的鼠标的地图位置保持不变,这样可以实现鼠标指在哪里缩放至哪里的效果。大家有什么更好的想法欢迎给我留言。