clsZoomIn.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 = "clsZoomIn"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. Option Explicit
  15. Implements esriSystemUI.ICommand   '继承ICommand接口
  16. Implements esriSystemUI.ITool      '继承ITool接口
  17. '定义类变量成员
  18. Private m_pPoint As esriGeometry.IPoint
  19. Private m_pFeedback As esriDisplay.INewEnvelopeFeedback
  20. Private m_bInUse As Boolean
  21. Private m_pBitmap As IPictureDisp
  22. Private m_pCursor As IPictureDisp
  23. Private m_pCursorMove As IPictureDisp
  24. Private m_pMap As IMap
  25. '重写类的Initialize()方法
  26. Private Sub Class_Initialize()
  27.   '从项目的资源文件中加载资源
  28.   Set m_pCursor = LoadResPicture("ZoomIn", vbResCursor)
  29.   Set m_pCursorMove = LoadResPicture("ZoomInMove", vbResCursor)
  30. End Sub
  31. '重写类的Terminate()方法
  32. Private Sub Class_Terminate()
  33.   '释放对象
  34.   Set m_pCursor = Nothing
  35.   Set m_pCursorMove = Nothing
  36. End Sub
  37. '实现ICommand接口的Enabled属性
  38. Private Property Get ICommand_Enabled() As Boolean
  39.   ICommand_Enabled = True
  40. End Property
  41. '实现ICommand接口的Checked属性
  42. Private Property Get ICommand_Checked() As Boolean
  43.   ICommand_Checked = False
  44. End Property
  45. '实现ICommand接口的Name属性
  46. Private Property Get ICommand_Name() As String
  47.   ICommand_Name = "DG_ZoomIn"
  48. End Property
  49. '实现ICommand接口的Caption属性
  50. Private Property Get ICommand_Caption() As String
  51.   ICommand_Caption = "放大"
  52. End Property
  53. '实现ICommand接口的Tooltip属性
  54. Private Property Get ICommand_Tooltip() As String
  55.   ICommand_Tooltip = "拉框放大"
  56. End Property
  57. '实现ICommand接口的Message属性
  58. Private Property Get ICommand_Message() As String
  59.   ICommand_Message = "通过点击或拉框进行放大操作"
  60. End Property
  61. '实现ICommand接口的HelpFile属性
  62. Private Property Get ICommand_HelpFile() As String
  63.   ' 在这里可以添加其它的重写代码
  64. End Property
  65. '实现ICommand接口的HelpContextID属性
  66. Private Property Get ICommand_HelpContextID() As Long
  67.   ' 在这里可以添加其它的重写代码
  68. End Property
  69. '实现ICommand接口的Bitmap属性
  70. Private Property Get ICommand_Bitmap() As esriSystem.OLE_HANDLE
  71.   ICommand_Bitmap = m_pBitmap
  72. End Property
  73. '实现ICommand接口的Category属性
  74. Private Property Get ICommand_Category() As String
  75.   ICommand_Category = "例子/缩放"
  76. End Property
  77. '定义ICommand接口的OnCreate事件
  78. Private Sub ICommand_OnCreate(ByVal hook As Object)
  79.    Set m_pMap = hook.Map
  80. End Sub
  81. '定义ICommand接口的OnClick事件
  82. Private Sub ICommand_OnClick()
  83.  ' 在这里可以添加其它的重写代码
  84. End Sub
  85. '实现ITool接口的Cursor属性
  86. Private Property Get ITool_Cursor() As esriSystem.OLE_HANDLE
  87.   If (m_bInUse) Then
  88.     ITool_Cursor = m_pCursorMove
  89.   Else
  90.     ITool_Cursor = m_pCursor
  91.   End If
  92. End Property
  93. '定义ITool接口的OnMouseDown事件
  94. Private Sub ITool_OnMouseDown(ByVal Button As Long, ByVal shift As Long, ByVal X As Long, ByVal Y As Long)
  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. '定义ITool接口的OnMouseMove事件
  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. '定义ITool接口的OnMouseUp事件
  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.   '停止拉框
  122.     
  123.   '获得map
  124.   Dim pActiveView As esriCarto.IActiveView
  125.   Set pActiveView = m_pMap
  126.   '如果有Envelope
  127.   Dim pEnvelope As esriGeometry.IEnvelope
  128.   If (m_pFeedback Is Nothing) Then
  129.     '点击缩放
  130.     Set pEnvelope = pActiveView.Extent
  131.     pEnvelope.Expand 0.8, 0.8, True
  132.     pEnvelope.CenterAt m_pPoint
  133.   Else
  134.     '停止拉框
  135.     Set pEnvelope = m_pFeedback.Stop
  136.     '如果长、宽为0则退出
  137.     If (pEnvelope.Width = 0) Or (pEnvelope.Height = 0) Then
  138.       Set m_pFeedback = Nothing
  139.       m_bInUse = False
  140.       Exit Sub
  141.     End If
  142.   End If
  143.   
  144.   '设置新的Extent
  145.   pActiveView.Extent = pEnvelope
  146.   pActiveView.Refresh
  147.   Set m_pFeedback = Nothing
  148.   m_bInUse = False
  149. End Sub
  150. '定义ITool接口的OnDblClick事件
  151. Private Sub ITool_OnDblClick()
  152.   ' 在这里可以添加其它的重写代码
  153. End Sub
  154. '定义ITool接口的OnKeyDown事件
  155. Private Sub ITool_OnKeyDown(ByVal KeyCode As Long, ByVal shift As Long)
  156.   If m_bInUse = True Then
  157.     If KeyCode = 27 Then  'ESC key
  158.       '停止捕获
  159.       Set m_pFeedback = Nothing
  160.       m_bInUse = False
  161.     End If
  162.   End If
  163. End Sub
  164. '定义ITool接口的OnKeyUp事件
  165. Private Sub ITool_OnKeyUp(ByVal KeyCode As Long, ByVal shift As Long)
  166.   ' 在这里可以添加其它的重写代码
  167.   
  168. End Sub
  169. '定义ITool接口的OnContextMenu事件
  170. Private Function ITool_OnContextMenu(ByVal X As Long, ByVal Y As Long) As Boolean
  171.   ' 在这里可以添加其它的重写代码
  172. End Function
  173. '实现ITool接口的OnKeyDown方法
  174. Private Sub ITool_Refresh(ByVal hdc As esriSystem.OLE_HANDLE)
  175.   ' 在这里可以添加其它的重写代码
  176. End Sub
  177. '实现ITool接口的Deactivate方法
  178. Private Function ITool_Deactivate() As Boolean
  179.   ITool_Deactivate = True
  180.   
  181. End Function