• 一起学习ArcEngine(3)缩小


    继承自定义基类ToolBase,代码如下,比以前清爽多了!

       1:      /// <summary>
       2:      /// 地图缩小工具
       3:      /// </summary>
       4:      public class ZoomOut : ToolBase
       5:      {
       6:          private INewEnvelopeFeedback m_feedBack;
       7:          private IPoint m_point;
       8:          private Boolean m_isMouseDown;
       9:   
      10:           #region 实例化
      11:          public ZoomOut()
      12:              :base("ZoomOut")  
      13:          {
      14:              if (m_cursor == null) m_cursor = getCursor(esriSystemMouseCursor.esriSystemMouseCursorZoomOut);
      15:          }
      16:        
      17:          public ZoomOut(AxMapControl mapCtl) 
      18:              : base(mapCtl, "ZoomOut") 
      19:          {
      20:              if (m_cursor == null) m_cursor = getCursor(esriSystemMouseCursor.esriSystemMouseCursorZoomOut);
      21:          }
      22:   
      23:          public ZoomOut(AxPageLayoutControl plCtl)
      24:              : base(plCtl, "ZoomOut")
      25:          {
      26:              if (m_cursor == null) m_cursor = getCursor(esriSystemMouseCursor.esriSystemMouseCursorZoomOut);
      27:          }
      28:          #endregion
      29:   
      30:          protected override void initContextMenu()
      31:          {
      32:              ContextMenu cmenu = new ContextMenu();
      33:              MenuItem m = new MenuItem();
      34:              m.Text = "结束";
      35:              m.Click += new EventHandler(m_Click);
      36:              cmenu.MenuItems.Add(m);
      37:              m_contextMenu = cmenu;
      38:   
      39:          }
      40:   
      41:          void m_Click(object sender, EventArgs e)
      42:          {
      43:              if (m_pControl is AxMapControl)
      44:              {
      45:                  AxMapControl am = m_pControl as AxMapControl;
      46:                  am.CurrentTool = null;
      47:              }
      48:          }
      49:   
      50:   
      51:          public override void OnMouseDown(int Button, int Shift, int X, int Y)
      52:          {
      53:              if (m_pActiveView == null) return;
      54:              if (Button == 2)
      55:              {
      56:                  ShowContextMenu(X, Y);
      57:                  return;
      58:              }
      59:   
      60:              m_point = m_pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y);
      61:              m_cursor = getCursor(ESRI.ArcGIS.SystemUI.esriSystemMouseCursor.esriSystemMouseCursorZoomOut);
      62:              m_isMouseDown = true;
      63:   
      64:          }
      65:   
      66:          public override void OnMouseMove(int Button, int Shift, int X, int Y)
      67:          {
      68:              if (!m_isMouseDown) return;
      69:   
      70:              //Start an envelope feedback
      71:              if (m_feedBack == null)
      72:              {
      73:                  m_feedBack = new NewEnvelopeFeedbackClass();
      74:                  m_feedBack.Display = m_pActiveView.ScreenDisplay;
      75:                  m_feedBack.Start(m_point);
      76:              }
      77:              //Move the envelope feedback
      78:              m_feedBack.MoveTo(m_pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y));
      79:          }
      80:   
      81:          public override void OnMouseUp(int Button, int Shift, int X, int Y)
      82:          {
      83:              if (!m_isMouseDown) return;
      84:   
      85:              IEnvelope pEnvelope;
      86:              IEnvelope pFeedEnvelope;
      87:   
      88:              double newWidth, newHeight;
      89:   
      90:              //If an envelope has not been tracked
      91:              if (m_feedBack == null)
      92:              {
      93:                  //Zoom out from the mouse click
      94:                  pEnvelope = m_pActiveView.Extent;
      95:                  pEnvelope.Expand(2, 2, true);
      96:                  pEnvelope.CenterAt(m_point);
      97:              }
      98:              else
      99:              {
     100:                  //Stop the envelope feedback
     101:                  pFeedEnvelope = m_feedBack.Stop();
     102:   
     103:                  //Exit if the envelope height or width is 0
     104:                  if (pFeedEnvelope.Width == 0 || pFeedEnvelope.Height == 0)
     105:                  {
     106:                      m_feedBack = null;
     107:                      m_isMouseDown = false;
     108:                  }
     109:   
     110:                  newWidth = m_pActiveView.Extent.Width * (m_pActiveView.Extent.Width / pFeedEnvelope.Width);
     111:                  newHeight = m_pActiveView.Extent.Height * (m_pActiveView.Extent.Height / pFeedEnvelope.Height);
     112:   
     113:                  //Set the new extent coordinates
     114:                  pEnvelope = new EnvelopeClass();
     115:                  pEnvelope.PutCoords(m_pActiveView.Extent.XMin - ((pFeedEnvelope.XMin - m_pActiveView.Extent.XMin) * (m_pActiveView.Extent.Width / pFeedEnvelope.Width)),
     116:                      m_pActiveView.Extent.YMin - ((pFeedEnvelope.YMin - m_pActiveView.Extent.YMin) * (m_pActiveView.Extent.Height / pFeedEnvelope.Height)),
     117:                      (m_pActiveView.Extent.XMin - ((pFeedEnvelope.XMin - m_pActiveView.Extent.XMin) * (m_pActiveView.Extent.Width / pFeedEnvelope.Width))) + newWidth,
     118:                      (m_pActiveView.Extent.YMin - ((pFeedEnvelope.YMin - m_pActiveView.Extent.YMin) * (m_pActiveView.Extent.Height / pFeedEnvelope.Height))) + newHeight);
     119:              }
     120:   
     121:              //Set the new extent
     122:              m_pActiveView.Extent = pEnvelope;
     123:   
     124:              //Refresh the active view
     125:              m_pActiveView.Refresh();
     126:              m_feedBack = null;
     127:              m_isMouseDown = false;
     128:          }
     129:   
     130:          public void OnKeyDown(int keyCode, int shift)
     131:          {
     132:              if (m_isMouseDown)
     133:              {
     134:                  if (keyCode == 27) //ESC key
     135:                  {
     136:                      m_feedBack = null;
     137:                      m_isMouseDown = false;
     138:                      m_pHookHelper.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewForeground, null, null);
     139:                  }
     140:              }
     141:          }
     142:      }
  • 相关阅读:
    通过IP获取地理位置,做分类系统必备!
    【转】句柄详解
    【转】C#泛型约束
    [转]掌握 Ajax,第 3 部分: Ajax 中的高级请求和响应[IBM]
    WPF调用Winfrom控件
    【转】C#对象的深拷贝与浅拷贝
    判断一个OBject类型是值类型还是引用类型
    WCF关于svcutil生成关于TCP绑定出现 元数据包含无法解析的引用:“net.tcp://127.0.0.1:9999/xxxx/”的解决方案
    C#枚举基础解析
    [转]掌握Ajax 第 1 部分: Ajax 入门简介 [IBM]
  • 原文地址:https://www.cnblogs.com/liuyh208/p/1562130.html
Copyright © 2020-2023  润新知