用程序启动ArcMap工作文档的VB代码实现
- 产品教程
- 2007-11-22
- 138热度
- 0评论
昨天在图书馆,空间信息学院的一MM找到我帮忙,她需要在VB下启动ArcMap的代码。下午利用休息时间写了代码,其实在VB下启动ArcMap并不难,无非就是启动ArcMap的应用程序和ArcMap的工作文档,与VB调用Office WORD方法类似。具体代码如下,我已经调试通过.
Option Explicit
Private m_pDoc As IDocument
Private m_pApp As IApplication
Private WithEvents m_pAppRot As AppROT
Sub QuitArcMap()
If m_pDoc Is Nothing Then
Exit Sub
Else
m_pApp.Shutdown ' Quit ArcMap
Set m_pDoc = Nothing ' Release m_pDoc
Set m_pApp = Nothing ' Releasr m_pApp
cmdStartArcMap.Enabled = True
cmdAddData.Enabled = False
cmdQuitArcMap.Enabled = False
End If
End Sub
Sub StartArcMap()
If m_pDoc Is Nothing Then
frmStartArcMap.MousePointer = vbHourglass
' 打开ArcMap
Set m_pDoc = New MxDocument
' 获得程序的引用
Set m_pApp = m_pDoc.Parent
' 显示ArcMap
m_pApp.Visible = True
cmdStartArcMap.Enabled = False
cmdAddData.Enabled = True
cmdQuitArcMap.Enabled = True
frmStartArcMap.MousePointer = vbNormal
End If
End Sub
Private Sub cmdAddData_Click()
Dim pObjFactory As IObjectFactory
Dim pMxDoc As IMxDocument
Dim pMap As IMap
Dim pGxDialog As IGxDialog
Dim pGxFilter As IGxObjectFilter
Dim pGxObjects As IEnumGxObject
Dim pGxDataset As IGxDataset
Dim pFeatureLayer As IGeoFeatureLayer
frmStartArcMap.MousePointer = vbHourglass
'从程序中获得对象工厂接口
Set pObjFactory = m_pApp
' 获得ArcMap文档和激活地图的引用
Set pMxDoc = m_pDoc
Set pMap = pMxDoc.FocusMap
' 创建特征层并添加到ArcMap
' 使用ArcMap一般对象工厂保证这些对象出现在ArcMap程序空间中
' 显示 GXDialog 允许用户选择数据
Set pGxDialog = pObjFactory.Create("esriCatalogUI.GxDialog")
pGxDialog.AllowMultiSelect = True
pGxDialog.Title = "Select Feature Classes to Add To ArcMap"
' 设置 pGxFilter = New GxFilterFeatureClasses
Set pGxFilter = pObjFactory.Create("esriCatalog.GxFilterFeatureClasses")
Set pGxDialog.ObjectFilter = pGxFilter
pGxDialog.DoModalOpen m_pApp.hWnd, pGxObjects
If (pGxObjects Is Nothing) Then Exit Sub
pGxObjects.Reset
Set pGxDataset = pGxObjects.Next
'创建图层
Do While (Not pGxDataset Is Nothing)
' 设置 pFeatureLayer = New FeatureLayer
Set pFeatureLayer = pObjFactory.Create("esriCarto.FeatureLayer")
Set pFeatureLayer.FeatureClass = pGxDataset.Dataset
pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName
pMap.AddLayer pFeatureLayer
Set pGxDataset = pGxObjects.Next
Loop
frmStartArcMap.MousePointer = vbNormal
End Sub
Private Sub cmdQuitArcMap_Click()
QuitArcMap
End Sub
Private Sub cmdStartArcMap_Click()
StartArcMap
End Sub
Private Sub Form_Load()
Move 0, 0
Set m_pAppRot = New AppROT
cmdAddData.Enabled = False
cmdQuitArcMap.Enabled = False
End Sub
Private Sub Form_Unload(Cancel As Integer)
QuitArcMap
Set m_pAppRot = Nothing
End Sub
Private Sub m_pAppRot_AppRemoved(ByVal pApp As esriFramework.IApplication)
' 如果退出ArcMap释放m_pDoc 和 m_pApp
If TypeOf pApp Is IMxApplication Then
If pApp.Document Is m_pDoc Then
Set m_pDoc = Nothing
Set m_pApp = Nothing
cmdStartArcMap.Enabled = True
cmdAddData.Enabled = False
cmdQuitArcMap.Enabled = False
End If
End If
End Sub