IExtension應用實例

ARCMAP扩展, 實現移動特定element,視圖中心將隨element改變。

做好這個dll后,调用 windows 目录下 system32 子目录下的 regsvr32.exe 用下面的形式
注册编译好的DLL: win 目录\system32\regsvr32.exe  <路径>\<文件名>.dll . 运行
<arcmap 目录>\arcexe81\Bin\categories.exe,在打开的 Component
Catregory Manager 中找到 ESRI Mx Extensions,点击 Add Object…按钮将上面
注册的DLL 文件加入,并选中实现IExtension 接口的类名即可。 

 

Option   Explicit
 
Implements  IExtension

 
Private   WithEvents  p  As  GraphicsContainerEvents
 
Dim  m_pApp  As  IApplication

 
Dim   WithEvents  m_pDoc  As  MxDocument
 
ExpandedBlockStart.gifContractedBlock.gif 
Private   Property Get() Property Get IExtension_Name() As String
     IExtension_Name 
= "Moving Center"
 
End Property

 
ExpandedBlockStart.gifContractedBlock.gif 
Private   Sub IExtension_Shutdown() Sub IExtension_Shutdown()
     
' Clear the reference to the Application and MxDocument
     Set m_pApp = Nothing
     
Set m_pDoc = Nothing
 
End Sub

 
ExpandedBlockStart.gifContractedBlock.gif 
Private   Sub IExtension_Startup() Sub IExtension_Startup(initializationData As Variant)
 
     
Set m_pApp = initializationData
     
'Start listening for the MxDocument events.
     Set m_pDoc = m_pApp.Document

 
End Sub

 
ExpandedBlockStart.gifContractedBlock.gif 
Private   Function m_pDoc_NewDocument() Function m_pDoc_NewDocument() As Boolean
     
' Do something when a new document is created
    InitalElementUpdateEvent
 
End Function

 
ExpandedBlockStart.gifContractedBlock.gif 
Private   Function m_pDoc_OpenDocument() Function m_pDoc_OpenDocument() As Boolean
     
' So something when a document is opened.
   InitalElementUpdateEvent
 
 
End Function


ExpandedBlockStart.gifContractedBlock.gif
Private   Sub InitalElementUpdateEvent() Sub InitalElementUpdateEvent()
    
Dim pMxd As IMxDocument
    
Set pMxd = getmxd
    
    
Dim pBM As IBasicMap
    
Set pBM = pMxd.FocusMap
    
Set p = pBM.BasicGraphicsLayer

End Sub


ExpandedBlockStart.gifContractedBlock.gif
Private   Function getmxd() Function getmxd() As IMxDocument
    
Set getmxd = m_pDoc
End Function


ExpandedBlockStart.gifContractedBlock.gif
Private   Sub p_ElementUpdated() Sub p_ElementUpdated(ByVal Element As esriCarto.IElement)
    
    
If TypeOf getmxd.activeView Is IPageLayout Then
       
' MsgBox "Please switch to data view."
        Exit Sub
    
End If
    
    
Dim pMap As IMap
    
Set pMap = getmxd.activeView
    
Dim pMapGraphicsSelect As IGraphicsContainerSelect
    
Set pMapGraphicsSelect = pMap
    
    
    
Dim pEnumElement As IEnumElement
    
Set pEnumElement = pMapGraphicsSelect.SelectedElements
    pEnumElement.Reset
    
    
Dim pElement As IElement
    
Dim pEleProperty As IElementProperties
    
Set pElement = pEnumElement.Next
    
    
Do While Not pElement Is Nothing
        
Set pEleProperty = pElement
        
If pEleProperty.Name = "ppextent" Then
           
           
Dim pPoint As IPoint
           
Set pPoint = New Point
           
           pPoint.x 
= 0.5 * (pElement.Geometry.envelope.LowerLeft.x + pElement.Geometry.envelope.UpperRight.x)
           pPoint.y 
= 0.5 * (pElement.Geometry.envelope.LowerLeft.y + pElement.Geometry.envelope.UpperRight.y)
           
           
Set pPoint.SpatialReference = pElement.Geometry.envelope.SpatialReference
              
           
           
Dim activeView As IActiveView
           
Set activeView = getmxd.activeView
           
           
Dim envelope As IEnvelope
           
Set envelope = activeView.Extent
           envelope.CenterAt pPoint
           
           activeView.Extent 
= envelope
           
           getmxd.activeView.Refresh
           
Exit Sub
        
End If
        
         
Set pElement = pEnumElement.Next
    
Loop

   
End Sub


 

转载于:https://www.cnblogs.com/iswszheng/archive/2009/04/03/1429053.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值