zoukankan      html  css  js  c++  java
  • C#鹰眼_带拖动

    结合help中给的例子,又使用DisPlayFeedBack,实现在鹰眼中拖动。拖动过程中小边框的显示问题解决的不是很好,还望大家多多指教。
    实现如下:
    两个MapControl控件:axMapControl1和axMapControl2,axMapControl2存放鹰眼地图。
    主要变量有:
    private IEnvelope m_Envelope;  //The envelope drawn on the small MapControl---axMapControl2.
    private System.Object m_FillSymbol;  //The symbol used to draw the envelope on the small MapControl

    //axMapControl1中的事件

    private void CreateOverviewSymbol() //create the symbol used in the small MapControl ,自定义函数
            {
                //Get the IRGBColor interface.
                IRgbColor color = new RgbColorClass();
                //Set the color properties.
                color.RGB = 255;
                //Get the ILine symbol interface.
                ILineSymbol outline = new SimpleLineSymbolClass();
                //Set the line symbol properties.
                outline.Width = 1.5;
                outline.Color = color;
                //Get the IFillSymbol interface.
                ISimpleFillSymbol simpleFillSymbol = new SimpleFillSymbolClass();
                //Set the fill symbol properties.
                simpleFillSymbol.Outline = outline;
                simpleFillSymbol.Style = esriSimpleFillStyle.esriSFSHollow;
                m_FillSymbol = simpleFillSymbol;
            }
    private void axMapControl1_OnMapReplaced(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMapReplacedEvent e) //更新axMapControl1地图时装载鹰眼地图
            {
                axMapControl2.LoadMxFile(axMapControl1.DocumentFilename);
                axMapControl2.Extent=axMapControl1.FullExtent;                      
                m_Envelope = axMapControl1.ActiveView.Extent;
            }

    private void axMapControl1_OnExtentUpdated(object sender, IMapControlEvents2_OnExtentUpdatedEvent e)
            {  //axMapControl1的范围变化时,设置鹰眼小边框m_Envelope 的大小
                axMapControl2.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewForeground, null, null);
                m_Envelope = e.newEnvelope as IEnvelope;
            }
    private void axMapControl1_OnAfterDraw(object sender, IMapControlEvents2_OnAfterDrawEvent e)
            {
                if (m_Envelope == null) return;
               //If the foreground phase has drawn.
                esriViewDrawPhase viewDrawPhase = (esriViewDrawPhase)e.viewDrawPhase;
                if (viewDrawPhase == esriViewDrawPhase.esriViewForeground)
                {
                    axMapControl2.DrawShape(m_Envelope as IGeometry, ref m_FillSymbol);
                }
            }
    几个变量:
    private IMoveEnvelopeFeedback pSmallViewerEnvelope;//鹰眼小地图的红框
    private IPoint pSmallViewerMouseDownPt;//拖动时鼠标落点
    private bool isTrackingSmallViewer = false; //标识是否在拖动
    static int moveCount = 0;//记录移动的个数,为移动过程中显示红框用。权宜之计,望高手提出更好解决方案

    //axMapControl2中的事件
    private void axMapControl2_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e)//鹰眼互动
            {
                //IPoint pt = new PointClass();
                pSmallViewerMouseDownPt = new PointClass();
                pSmallViewerMouseDownPt.PutCoords(e.mapX, e.mapY);
                axMapControl1.CenterAt(pSmallViewerMouseDownPt);


                isTrackingSmallViewer = true;
                if (pSmallViewerEnvelope == null)
                {
                    pSmallViewerEnvelope = new MoveEnvelopeFeedbackClass();
                    pSmallViewerEnvelope.Display = axMapControl2.ActiveView.ScreenDisplay;
                    pSmallViewerEnvelope.Symbol = (ISymbol)m_FillSymbol;
                }
                pSmallViewerEnvelope.Start(m_Envelope, pSmallViewerMouseDownPt);
               
            }
          
           private void axMapControl2_OnMouseMove(object sender, IMapControlEvents2_OnMouseMoveEvent e)
            {
                if (isTrackingSmallViewer)
                {
                    moveCount++;
                    if (moveCount % 4 == 0)//因为一刷新,红框就没了。所以每移动4次就刷新一下,保持红框的连续性。
                        axMapControl2.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewForeground, null, null);
                    pSmallViewerMouseDownPt.PutCoords(e.mapX, e.mapY);
                    pSmallViewerEnvelope.MoveTo(pSmallViewerMouseDownPt);

                }           
            }
           private void axMapControl2_OnMouseUp(object sender, IMapControlEvents2_OnMouseUpEvent e)
            {
                if (pSmallViewerEnvelope != null)
                {
                    m_Envelope = pSmallViewerEnvelope.Stop();
                    axMapControl1.Extent = m_Envelope;
                    isTrackingSmallViewer = false;              
                }
            }

  • 相关阅读:
    大气漂亮美观的三个网站后台数据管理模板 大大提升你的开发效率
    9个设计师常用的高清图库 不敢配图? 这9个免版权图库牢记心中!
    《PHP制作个人博客》之四:分类添加及前端导航数据用php动态调取
    《全栈营销之如何制作个人博客》之二:php环境安装及个人博客后台搭建 让你的博客跑起来
    《全栈营销之如何制作个人博客》之一:用什么开发语言和CMS系统
    adobe 2020版全家桶免费破解版 最新pr, photoshop ae 免费使用
    三个装修 家具 装饰公司网站模板 大气美观 简单明了的静态模板
    程序员摆地摊能接到活吗?码农地摊卖什么能挣到外快钱?
    phpstorm2020最新版激活方法 永久更新
    五个最适合做博客的开源系统 开源免费大量精美模板使用!
  • 原文地址:https://www.cnblogs.com/cuiguanghe/p/2963653.html
Copyright © 2011-2022 走看看