clsZoomOut.cls
上传用户:wj1234qo
上传日期:2021-08-01
资源大小:38k
文件大小:6k
源码类别:

工具条

开发平台:

Visual Basic

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "clsZoomOut"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. Option Explicit
  15. Private m_pBitmap As IPictureDisp
  16. Private m_pCursor As IPictureDisp
  17. Private m_pCursorMove As IPictureDisp
  18. Private m_pPoint As esriGeometry.IPoint
  19. Private m_pFeedback As esriDisplay.INewEnvelopeFeedback
  20. Private m_bInUse As Boolean
  21. Private m_pMap As IMap
  22. Implements esriSystemUI.ICommand
  23. Implements esriSystemUI.ITool
  24. Private Sub Class_Initialize()
  25.   '从工程资源文件中加载资源
  26.   Set m_pCursor = LoadResPicture("ZoomOut", vbResCursor)
  27.   Set m_pCursorMove = LoadResPicture("ZoomOutMove", vbResCursor)
  28.   
  29. End Sub
  30. Private Sub Class_Terminate()
  31.   Set m_pBitmap = Nothing
  32.   Set m_pCursor = Nothing
  33.   Set m_pCursorMove = Nothing
  34. End Sub
  35. Private Property Get ICommand_Enabled() As Boolean
  36.   ICommand_Enabled = True
  37. End Property
  38.  
  39. Private Property Get ICommand_Checked() As Boolean
  40.   ICommand_Checked = False
  41. End Property
  42.  
  43. Private Property Get ICommand_Name() As String
  44.   ICommand_Name = "DG_ZoomOut"
  45. End Property
  46. Private Property Get ICommand_Caption() As String
  47.   ICommand_Caption = "缩小"
  48. End Property
  49.  
  50. Private Property Get ICommand_Tooltip() As String
  51.   ICommand_Tooltip = "放大"
  52. End Property
  53.  
  54. Private Property Get ICommand_Message() As String
  55.   ICommand_Message = "拉框或点击进行缩放"
  56. End Property
  57.  
  58. Private Property Get ICommand_HelpFile() As String
  59.   
  60.   ' 在这里可以添加其它的重写代码
  61.   
  62. End Property
  63.  
  64. Private Property Get ICommand_HelpContextID() As Long
  65.   ' 在这里可以添加其它的重写代码
  66. End Property
  67.  
  68. Private Property Get ICommand_Bitmap() As esriSystem.OLE_HANDLE
  69.   ICommand_Bitmap = m_pBitmap
  70. End Property
  71.  
  72. Private Property Get ICommand_Category() As String
  73.   ICommand_Category = "例子/缩小"
  74. End Property
  75.  
  76. Private Sub ICommand_OnCreate(ByVal hook As Object)
  77.    Set m_pMap = hook.map
  78.   
  79. End Sub
  80.  
  81. Private Sub ICommand_OnClick()
  82.   
  83.   ' 在这里可以添加其它的重写代码
  84. End Sub
  85. Private Property Get ITool_Cursor() As esriSystem.OLE_HANDLE
  86.   If (m_bInUse) Then
  87.     ITool_Cursor = m_pCursorMove
  88.   Else
  89.     ITool_Cursor = m_pCursor
  90.   End If
  91. End Property
  92.  
  93. Private Sub ITool_OnMouseDown(ByVal Button As Long, ByVal shift As Long, ByVal X As Long, ByVal Y As Long)
  94.   
  95.   Dim pActiveView As esriCarto.IActiveView
  96.   Set pActiveView = m_pMap
  97.   Set m_pPoint = pActiveView.ScreenDisplay.displayTransformation.ToMapPoint(X, Y)
  98.   m_bInUse = True
  99.   
  100. End Sub
  101.  
  102. Private Sub ITool_OnMouseMove(ByVal Button As Long, ByVal shift As Long, ByVal X As Long, ByVal Y As Long)
  103.   If (Not m_bInUse) Then Exit Sub
  104.   
  105.   '获得map
  106.   Dim pActiveView As esriCarto.IActiveView
  107.   Set pActiveView = m_pMap
  108.   '开始拉框
  109.   If (m_pFeedback Is Nothing) Then
  110.     Set m_pFeedback = New NewEnvelopeFeedback
  111.     Set m_pFeedback.Display = pActiveView.ScreenDisplay
  112.     m_pFeedback.Start m_pPoint
  113.   End If
  114.   '绘制矩形框
  115.   m_pFeedback.MoveTo pActiveView.ScreenDisplay.displayTransformation.ToMapPoint(X, Y)
  116. End Sub
  117.  
  118. Private Sub ITool_OnMouseUp(ByVal Button As Long, ByVal shift As Long, ByVal X As Long, ByVal Y As Long)
  119.   If (Not m_bInUse) Then Exit Sub
  120.     
  121.   Dim pEnvelope As esriGeometry.IEnvelope
  122.   Dim pFeedEnvelope As esriGeometry.IEnvelope
  123.   Dim newWidth As Double
  124.   Dim newHeight As Double
  125.   
  126.   '得到Map
  127.   Dim pActiveView As esriCarto.IActiveView
  128.   Set pActiveView = m_pMap
  129.   If (m_pFeedback Is Nothing) Then
  130.     '如果没有拖动,就直接缩放
  131.     Set pEnvelope = pActiveView.Extent
  132.     pEnvelope.Expand 1.5, 1.5, True
  133.     pEnvelope.CenterAt m_pPoint
  134.   Else
  135.     '停止拉框
  136.     Set pFeedEnvelope = m_pFeedback.Stop
  137.     '如果长、宽为0则退出
  138.     If (pFeedEnvelope.Width = 0) Or (pFeedEnvelope.Height = 0) Then
  139.       Set m_pFeedback = Nothing
  140.       m_bInUse = False
  141.       Exit Sub
  142.     End If
  143.     
  144.     newWidth = pActiveView.Extent.Width * (pActiveView.Extent.Width / pFeedEnvelope.Width)
  145.     newHeight = pActiveView.Extent.Height * (pActiveView.Extent.Height / pFeedEnvelope.Height)
  146.       
  147.     '计算新的Envelope
  148.     Set pEnvelope = New Envelope
  149.     pEnvelope.PutCoords pActiveView.Extent.XMin - ((pFeedEnvelope.XMin - pActiveView.Extent.XMin) * (pActiveView.Extent.Width / pFeedEnvelope.Width)), _
  150.                    pActiveView.Extent.YMin - ((pFeedEnvelope.YMin - pActiveView.Extent.YMin) * (pActiveView.Extent.Height / pFeedEnvelope.Height)), _
  151.                   (pActiveView.Extent.XMin - ((pFeedEnvelope.XMin - pActiveView.Extent.XMin) * (pActiveView.Extent.Width / pFeedEnvelope.Width))) + newWidth, _
  152.                   (pActiveView.Extent.YMin - ((pFeedEnvelope.YMin - pActiveView.Extent.YMin) * (pActiveView.Extent.Height / pFeedEnvelope.Height))) + newHeight
  153.   End If
  154.   
  155.   '设置Extent
  156.   pActiveView.Extent = pEnvelope
  157.   '刷新
  158.   pActiveView.Refresh
  159.   Set m_pFeedback = Nothing
  160.   m_bInUse = False
  161. End Sub
  162.  
  163. Private Sub ITool_OnDblClick()
  164.   ' 在这里可以添加其它的重写代码
  165. End Sub
  166.  
  167. Private Sub ITool_OnKeyDown(ByVal KeyCode As Long, ByVal shift As Long)
  168.   If m_bInUse = True Then
  169.     If KeyCode = 27 Then  'ESC key
  170.       '停止捕获
  171.       Set m_pFeedback = Nothing
  172.       m_bInUse = False
  173.      End If
  174.   End If
  175. End Sub
  176.  
  177. Private Sub ITool_OnKeyUp(ByVal KeyCode As Long, ByVal shift As Long)
  178.   ' 在这里可以添加其它的重写代码
  179. End Sub
  180.  
  181. Private Function ITool_OnContextMenu(ByVal X As Long, ByVal Y As Long) As Boolean
  182.   ' 在这里可以添加其它的重写代码
  183. End Function
  184.  
  185. Private Sub ITool_Refresh(ByVal hdc As esriSystem.OLE_HANDLE)
  186.   '' 在这里可以添加其它的重写代码
  187. End Sub
  188.  
  189. Private Function ITool_Deactivate() As Boolean
  190.   ITool_Deactivate = True
  191. End Function