Pan.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 = "Pan"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = True
  14. ' Copyright 1995-2005 ESRI
  15. ' All rights reserved under the copyright laws of the United States.
  16. ' You may freely redistribute and use this sample code, with or without modification.
  17. ' Disclaimer: THE SAMPLE CODE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 
  18. ' WARRANTIES, INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
  19. ' FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ESRI OR 
  20. ' CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, 
  21. ' OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
  22. ' SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
  23. ' INTERRUPTION) SUSTAINED BY YOU OR A THIRD PARTY, HOWEVER CAUSED AND ON ANY 
  24. ' THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ARISING IN ANY 
  25. ' WAY OUT OF THE USE OF THIS SAMPLE CODE, EVEN IF ADVISED OF THE POSSIBILITY OF 
  26. ' SUCH DAMAGE.
  27. ' For additional information contact: Environmental Systems Research Institute, Inc.
  28. ' Attn: Contracts Dept.
  29. ' 380 New York Street
  30. ' Redlands, California, U.S.A. 92373 
  31. ' Email: contracts@esri.com
  32. Option Explicit
  33. Implements ICommand
  34. Implements ITool
  35. Private m_pMxDoc As IMxDocument
  36. Private m_pAppDisplay As IAppDisplay
  37. Private m_pFocusScreenDisplay As IScreenDisplay
  38. Private m_InPanOperation As Boolean
  39. Private Property Get ICommand_Bitmap() As esriSystem.OLE_HANDLE
  40.   ICommand_Bitmap = frmResources.imlBitmaps.ListImages(3).Picture
  41. End Property
  42. Private Property Get ICommand_Caption() As String
  43.   ICommand_Caption = "Pan"
  44. End Property
  45. Private Property Get ICommand_Category() As String
  46.   ICommand_Category = "Developer Samples"
  47. End Property
  48. Private Property Get ICommand_Checked() As Boolean
  49.   ICommand_Checked = False
  50. End Property
  51. Private Property Get ICommand_Enabled() As Boolean
  52.   ICommand_Enabled = True
  53. End Property
  54. Private Property Get ICommand_HelpContextID() As Long
  55. End Property
  56. Private Property Get ICommand_HelpFile() As String
  57. End Property
  58. Private Property Get ICommand_Message() As String
  59.   ICommand_Message = "Pan the display by user dragging map"
  60. End Property
  61. Private Property Get ICommand_Name() As String
  62.   ICommand_Name = "Developer Samples_Pan"
  63. End Property
  64. Private Sub ICommand_OnClick()
  65.   
  66. End Sub
  67. Private Sub ICommand_OnCreate(ByVal hook As Object)
  68.   Dim pApp As IApplication
  69.   Dim pMxApp As IMxApplication
  70.   
  71.   Set pApp = hook
  72.   Set pMxApp = pApp
  73.   
  74.   Set m_pMxDoc = pApp.Document
  75.   Set m_pAppDisplay = pMxApp.Display
  76. End Sub
  77. Private Property Get ICommand_Tooltip() As String
  78.   ICommand_Tooltip = "Pan"
  79. End Property
  80. Private Property Get ITool_Cursor() As esriSystem.OLE_HANDLE
  81.   If (Not m_InPanOperation) Then ' not in the middle of dragging
  82.     ITool_Cursor = frmResources.imlIcons.ListImages(5).Picture
  83.   Else
  84.     ITool_Cursor = frmResources.imlIcons.ListImages(6).Picture
  85.   End If
  86. End Property
  87. Private Function ITool_Deactivate() As Boolean
  88.   ITool_Deactivate = True
  89. End Function
  90. Private Function ITool_OnContextMenu(ByVal x As Long, ByVal y As Long) As Boolean
  91. End Function
  92. Private Sub ITool_OnDblClick()
  93. End Sub
  94. Private Sub ITool_OnKeyDown(ByVal keyCode As Long, ByVal Shift As Long)
  95. End Sub
  96. Private Sub ITool_OnKeyUp(ByVal keyCode As Long, ByVal Shift As Long)
  97. End Sub
  98. Private Sub ITool_OnMouseDown(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long)
  99.   If Not Button = 1 Then
  100.     Exit Sub
  101.   End If
  102.   
  103.   Dim pActiveView As IActiveView
  104.   Set pActiveView = m_pMxDoc.ActiveView
  105.   
  106.   'If in PageLayout view, find the closest map
  107.   If Not TypeOf pActiveView Is IMap Then
  108.     Dim pPoint As IPoint
  109.     Set pPoint = pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(x, y)
  110.     Dim pHitMap As IMap
  111.     Set pHitMap = pActiveView.HitTestMap(pPoint)
  112.     
  113.     'If no map is found, exit
  114.     If pHitMap Is Nothing Then
  115.       Exit Sub
  116.     End If
  117.     
  118.     'Make sure the active view is the hit map
  119.     If Not pHitMap Is m_pMxDoc.FocusMap Then
  120.       Set pActiveView.FocusMap = pHitMap
  121.     End If
  122.   Else
  123.   
  124.   End If
  125.   
  126.   'Start the pan operation
  127.   Set m_pFocusScreenDisplay = getFocusDisplay 'cache the ScreenDisplay
  128.   m_pFocusScreenDisplay.PanStart m_pMxDoc.CurrentLocation
  129.   m_InPanOperation = True
  130. End Sub
  131. Private Sub ITool_OnMouseMove(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long)
  132.   If Not Button = 1 Then
  133.     Exit Sub
  134.   End If
  135.   
  136.   If (Not m_InPanOperation) Then Exit Sub
  137.   
  138.   Dim pPoint As IPoint
  139.   Set pPoint = m_pFocusScreenDisplay.DisplayTransformation.ToMapPoint(x, y)
  140.   m_pFocusScreenDisplay.PanMoveTo pPoint
  141. End Sub
  142. Private Sub ITool_OnMouseUp(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long)
  143.   If Not Button = 1 Then
  144.     Exit Sub
  145.   End If
  146.  
  147.   If (Not m_InPanOperation) Then Exit Sub
  148.   
  149.   Dim pEnv As IEnvelope
  150.   Set pEnv = m_pFocusScreenDisplay.PanStop
  151.   If (Not pEnv Is Nothing) Then
  152.     m_pFocusScreenDisplay.DisplayTransformation.VisibleBounds = pEnv
  153.     m_pFocusScreenDisplay.Invalidate Nothing, True, esriAllScreenCaches
  154.   End If
  155.   m_InPanOperation = False
  156. End Sub
  157. Private Sub ITool_Refresh(ByVal hDC As esriSystem.OLE_HANDLE)
  158. End Sub
  159. Private Function getFocusDisplay() As IScreenDisplay
  160.   Dim pActiveView As IActiveView
  161.   Set pActiveView = m_pMxDoc.ActiveView
  162.   If TypeOf pActiveView Is IMap Then
  163.     Set getFocusDisplay = m_pAppDisplay.FocusScreen
  164.   Else
  165.     Set pActiveView = m_pMxDoc.ActiveView.FocusMap
  166.     Set getFocusDisplay = pActiveView.ScreenDisplay
  167.   End If
  168. End Function