如何在 VB.NET IDE 环境下开发 ArcMap 定制组件
(JUST FOR BEGINNERS)
1 准备:
安装 Vs.net 2003。
安装 ArcGis Desktop 9 (第一张安装盘) 及 ArcGis DevKit (第二张安装盘) 并
选中
dot.net 支持选项。
2 实例演示:
下面以一实例来简介在 VB.net IDE 环境下开发 ArcMap 定制 Com 组件的基本流程。组
件功能:放大视图一倍。
2.1 创建一个新的类库
1) 打开 Visual Studio .NET;
2)
在 vs.net 环境中,点击菜单:文件->新建->项目;
3)
在新建项目对话框中,在左侧项目类型面板中选择 Visual Basic 项目;
4)
在右侧的模板面板中选择类库;
5)
命名项目为 VBNetCmds,并且选择项目存储的路径;
6)
点击确定,这样就新建了一个项目。
[图一]
2.2 引用 ESRI 对象库
在正常使用 ESRI 提供的 dotnet 对象库之前,你必须将必须的 ESRI 对象库引用到当前
项目中。
ESRI 对象库在安装 Devkit 开发包时被安装,默认的安装路径为:ArcGIS 安
装根目录
\DotNet 。
[
图二]
1)
点击项目菜单,然后点击添加引用子菜单,添加引用对话框打开后,选择.net 标签,依
次 选 择
ESRI.ArcGIS.Geometry, ESRI.ArcGIS.SystemUI, ESRI.ArcGIS.Framework,
ESRI.ArcGIS.Carto 四个 ESRI 对象库,在本项目中还会用到其它几个对象库,如
System.Drawing 等,这时可以同时选择。
2)
点击确定,关闭添加引用对话框,同时完成必需引用的添加。
说明:
ESRI.ArcGIS.Geometry
引用是因为在后面的代码中会使用到 Iextent ,Ipoint 等接口;
ESRI.ArcGIS.SystemUI
引用是因为要用来 Icommand 等接口;
ESRI.ArcGIS.Carto
ESRI.ArcGIS.Framework
2.3 创建一个放大命令
可以使用 Com 类向导向项目中添加一个新类。
1)
在解决方案资源管理器中,右击项目,点击添加,然后选择添加新项;
2)
在添加新项对话框中,在右侧面板选择 Com 类,在对话框底部的名称文本框中输入此
Com 类的名称,本例中为 NetZoomIn.Vb。
[
图三]
3)
在解决方案资源管理器中,右键点击已存在的类(Class1.VB),然后点击删除,将项目
创建时自动创建的类删除。
[
图四]
2.4 添加 Imports 部份:
添加 Imports 表达式,可以简化代码的编写,使代码具有更好的可读性。
1)
在解决方案资源管理器中,双击 NETZoomIn.VB,打开它的代码编辑窗口。
2)
在代码窗口的顶部,类声明的起始部份添加如下的代码;
Imports ESRI.ArcGIS.SystemUI '定义Icommand、ITool等接口
Imports ESRI.ArcGIS.ArcMapUI '
定义ImxApplication、IDataWindow等接口
Imports ESRI.ArcGIS.Geometry '
定义IGeometry、IPoint等接口
Imports ESRI.ArcGIS.Framework '
定义IcommandBar、IDocument、IdockbleWindow等接口
Imports ESRI.ArcGIS.Carto '
定义IFeatureLayer、ICADLayer 等接口
Imports System.Drawing '
命令使用的图标位图IBitmap接口等
Imports System.Runtime.InteropServices '
2.5 实现 Icommand 接口:
1) 在 NetZoomIn.VB 代码窗口,可以使用如下代码声明 NetZoomIn 类实现 Icommand
接口:
Public Class NetZoomIn
Implements ICommand
2) 在 NetZoomIn 类代码窗口顶部的向导栏,点击左侧的下接列表,并选中 Icommand;
[
图五]
3)
在右侧的下接列表中,选择 Icommand 接口的第一个成员 Bitmap,Bitmap 属性的
代码框架将被添加到代码窗口中;
4)
重复 2)-3)步,将所有 Icommand 接口的成员代码框架添加到代码窗口中;
5)
点击 Ctrl+Shift+S ,保存项目中所有的文件。
[
图六]
2.6 添加 Icommand 接口成员代码:
现在开始向 Icommand 接口的成员中添加代码。
1)
向类中添加如下所示的代码段,下面的变量成员将被 Icommand 接口所使用。
Public Class NetZoomIn
Implements ICommand
Private m_app As IApplication 'ArcMap
应用程序接口
Private m_enabled As Boolean '
此命令是否有效
Private m_bitmap As Bitmap '
此命令显示于工具栏上的位图
Private m_hBitmap As IntPtr '
位图指针
#Region "COM GUIDs"
成员变量在类定义的开始部份进行声明。
2) 在 NetZoomIn 代码窗口,卷动并找到 OnCreate 方法,添加如下代码到该方法:
Public Sub OnCreate(ByVal hook As Object) Implements ESRI.ArcGIS.SystemUI.ICommand.OnCreate
'
该类创建时实现的功能,引用ArcMap应用程序,并使用该命令处于有效状态
If Not (hook Is Nothing) Then
If TypeOf (hook) Is IMxApplication Then
m_app = CType(hook, IApplication)
m_enabled = True
End If
End If
End Sub
3)
向上卷动代码窗口,找到 OnClick 方法,添加如下代码以完成当前活动视图的放
大动作:
Public Sub OnClick() Implements ESRI.ArcGIS.SystemUI.ICommand.OnClick
'
鼠标点击该命令按钮时,实现的功能