版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录
基础篇5
1.1.开发环境5
1.1.1.如何在ArcMap的VBA环境中编程5
1.1.2.如何在VB环境中利用ArcObjects组件开发ActiveXDLL10
1.1.3.如何在ArcMap中加载利用ArcObjects组件开发的ActiveXDLL
12
1.1.4.如何在VB环境中利用ArcObjects控件开发EXE13
1.2.用户界面15
1.2.1.如何创建定制的按钮(Button)15
1.2.2.如何创建定制的Tool17
1.2.3.如何创建定制的工具条(ToolBar)19
1.2.4.如何创建定制的Multiltem21
1.2.5.如何创建定制的菜单(Menu)23
1.2.6.如何创建定制的ToolControl24
1.2.7.如何创建定、使用制的可停靠窗口(DockableWindow)27
1.2.8.如何创建、使用定制的Extension29
1.2.9.如何使用状态条(StatusBar)与进度条(ProgressBar)30
1.2.10.如何使用ArcGIS的对话框32
1.2.11.如何调用ArcMap中现有的功能32
1.2.12.如何创建放大镜(虫眼)33
1.3.GeoDataBase34
1.3.1.如何加载Shape文件34
1.3.2.如何在ArcMap中加入Text和dBASE文件35
1.3.3.如何连接GeoDataBase文件37
1.3.4.如何连接Coverage文件39
1.3.5.如何连接栅格文件41
1.3.6.如何创建Shape文件42
1.3.7.如何创建DBF文件45
1.3.8.如何创建GeoDataBase文件47
1.3.9.如彳可仓4建Coverage文件48
1.3.10.如何建立文件连接(Join/Link)50
1.3.11.如何浏览纪录(属性查询)52
1.3.12.如何编辑记录53
1.3.13.如何增加记录54
1.3.14.如何删除记录56
1.3.15.如何纪录排序QTableSort)58
1.3.16.如何添加字段59
1.3.17.如何删除字段61
1.3.18.如何进行空间查询62
1.3.19.如何进行高级空间查询(两个层之间的空间查询)64
1.3.20.如何进行层与层之间的逻辑运算65
1.3.21.如何将shape文件转化成GeoDataBase(各种文件格式的转换)..67
1.3.22.如何将Map中显示的图形转化成栅格文件70
1.3.23.如何打开选中的层或独立表的属性窗口71
1.3.24.如何拷贝属性表中的一行73
1.3.25.如何为当前层或独立表创建一个Summary表75
1.3.26.如何利用用户定义的规则创建定制的排序78
1.3.27.如何实现在ArcMap上进行属性查询(Identify)84
1.3.28.如何设置和修改层的数据源87
1.4.Display88
1.4.1.如何实现在ArcMap中放大缩小地图88
1.4.2.如何实现在ArcMap中移动地图90
1.4.3.如何实现在ArcMap上画Polygon92
1.4.4.如彳可实现在ArcMap上进行测量94
1.4.5.如何实现在ArcMap上选取中记录100
1.4.6.如何实现在ArcMap中进行动作的撤销和重做101
1.4.7.如何画PolygonBuffers102
1.5.图元编辑104
1.5.1.如何得到图形的基本属性104
1.5.2.如何将选中的点集转换成Polygon105
1.5.3.如何将Multipoint转换成Points109
1.5.4.如何通过Polygon中的多个Ring创建多个PolygonIll
1.5.5.如何从Polyline创建Polygon113
1.5.6.如何从Polygon创建Polyline115
1.5.7,如何将Polygon/PolyCurve一般化(Generalize)117
1.5.8.如何获得Polygon的中点119
1.5.9.如何判断图形间的逻辑运算121
1.5.10.如何进行图形间的逻辑运算124
1.5.11.如何创建Envelope的Boundary127
1.5.12.如何通过鼠标移动图形130
1.5.13.如何为一个图形添加一个顶点133
1.5.14.如何删除一个图形上的一个顶点136
1.5.15.如何移动一个图形上的一个顶点138
1.6.Element141
1.6.1.如何创建MarkerElement141
1.6.2.如何创建TextElement142
1.6.3.如何创建BalloonCallout144
1.6.4.如何创建PolygonElement145
1.6.5.如何选中一个Element146
1.6.6.如彳可移动Element147
1.6.7.如何排列Element151
1.6.8.如何通过名字查询Element153
1.6.9.如何拷贝Element155
1.6.10.如何沿着折线路径显示Text158
1.7.Symbol和Renderer159
1.7.1.如何为一个层设置SimpleRenderer159
1.7.2.如何为一个层设置UniqueValueRenderer161
1.7.3.如何为一个层设置ClassBreaksRenderer165
1.7.4.如何为一个层设置ProportionalSymbolRenderer168
1.7.5.如何为一个层设置ChartRenderer170
1.7.6.如何为一个层设置DotDensityRenderer173
1.8.Layout和打印175
1.8.1.如何在PageLayout上添加Text175
1.8.2.如何在PageLayout上添加Legend176
1.8.3.如何在PageLayout上添加NorthArrow179
1.8.4.如何在PageLayout上添加Scalebar180
1.8.5.如何在PageLayout上添加ScaleText182
1.8.6.如何在PageLayout上添加Picture184
1.8.7.如何创建、删除地图网格(MapGrid)185
1.8.8.如何设置Layout中MapFrame的外观风格属性187
1.8.9.何设置Layout中Page的边框(Border)和背景(Background)
189
1.8.10.如何设置打印纸张的大小和方向192
1.9.坐标系统193
1.9.1.如何在ArcMap中设置地理坐标系和投影坐标系193
1.9.2.如何修改层的坐标系统194
1.9.3.如何把Polygon的顶点从经纬度坐标转换到平面直角坐标……196
1.10.ArcGis相关文件198
1.10.1.如何夹载grf文件198
1.10.2.如何新建指向Shape文件的lyr文件199
1.10.3.如何新建指向GeoDataBase文件的lyr文件200
1.10.4.如何加载mxd文件202
1.10.5.如何加载Apr文件(ArcView32)203
1.10.6.如何加载lyr文件204
1.10.7.lyr文件的属性的设置205
1.11.其他208
1.11.1.如何创建简单的ColumnChart208
1.11.2.如何将数据输出到Excel209
1.11.3.如何把Labe1s转换为Annotation211
1.11.4.如何把Annotation转换为PolygonFeatures215
1.11.5.如何设置Featurelayer的Label218
1.11.6.如何设置图层显示的透明度220
1.11.7.如何过滤层中要显示的Features220
1.11.8.如何在MapControl中新建一个Document并且保存221
2.提高篇224
2.1.缩略图的实现224
2.2.FeatureLayer显示Symbol的定制224
2.3.空间查询的综合应用224
2.4.图形编辑的综合应用224
2.5.重ta合:h表示占印刷224
2.6.kjz”处理233
2.7.Voronio作成239
2.8.数据处理加速一地图分块处理239
2.9.MapControl的使用240
2.10.运用PageLayout控件打印图形240
附录ArcGIS的GUID一览表240
基础篇
1.1.开发环境
1.1.1.如何在ArcMap的VBA环境中编程
ArcMap是ArcGIS家族的成员之一-,它内置了一种集成编程环境一VBA
(VisaulBasicforApllications)o通过VBA编程,用户不但可以扩展ArcMap
的菜单、工具条等,而且可以完成大多数用户的特定需求。
ArcMap中VBA编程的方法有两种,一种是写VBA宏,另一种是创建UlControl
并在其事件中写入实现用户需求的代码。下面列出两种方法的一般步骤。
方法一:写VBA宏(直接在VBA编辑器中编辑函数和过程)
1、如图1,单击菜单栏中的〈Tools〉命令,选择(Macros〉的〈VisualBasic
Editor》项,直接启动ArcMap的VBA编辑器;或者选择〈Macros》的〈Macros》项,
进入如图2所示Macro对话框,在"MacroName”文本框中输入要创建的宏的名
称,并点〈Create〉按钮,启动VBA编辑器。
图1启动Macro对话框/启动VBA编辑器
图2Macro对话框
2、醴|3所示的窗口中,用户可以根据实际选择在Normal节点或者Project
节点的ThisDocument、Forms、Modules中编写宏(函数或过程),Normal节点下所
写的宏系统自动保存,除非用户删除,否则它将始终存在并在任何工程中都有效;
而在Project节点下所写得宏随工程保存(如不保存工程,则宏也将不被保存),
并只在工程中有效。
MicrosoftVisualBasic-progress,mxd-[ThisDocument(Code)]
©FileEditViewInsertFormatDebugRunToolsAdd-InsWindowHelp
■陷与奋谷火斗]工?
〔Project—Project
旦[(GeneraI)-jShovProgress
国国门
SubShowProgress()
Normal(Normal.mxt)IOnErrorGoToerr1
DimpDocAsIMxDocument
SQ]ArcMapObjects
DimpMapAsIMap
ECjFormsDimpLayerAsILayer
由Q]ModulesDimpFeatLayerAsIFeatureLayer
B噩Project(progress,mxd)DimpFeatCursorAsIFeatureCursor
日…用ArcMapObjectsDimpFeatCIassAsIFeatureCIass
DimpFeatureAsIFeature
QThisDocumentDimdSumAsDoubIe
由…CjReferencesDimIFieIdlndexAsLong
DimINumFeatAsLong
'ropetties-ThisDocument区1DimdintervaIAsDoubIe
|ThisDocumeniMxDocument""▼I
SetpDoc=ARPIication.Document
Alphabetic|Categorized|SetpMap=pDoc.FocusMap
SetpLayer=pMap.Layer(0)
图3VBA编辑器(VBE)
3、运行VBA宏
在VBA编辑器中写好VBA代码后,有两种方式运行:第一,点击VBA编辑器
工具条中的.(运行)按钮,可立即运行写好的代码;第二,退出VBA编辑器,
重新启动Macro对话框,如图2,选择要运行的VBA宏名称,点击<Run>按钮即
可运行相应的VBA宏。
方法二:创建UlControl(交互式VBA编程)
1、用鼠标右击任何工具栏(条),在弹出的上托式菜单中选择〈Customize>
菜单项,如图4,进入图5所示的Customize对话框。
图4启动"Customize”对话框
2、切换到"Customize”对话框的"Commands”页,选中"UlControls”后
点击〈NewUlControl》按钮,进入图6所示的“NewUlControl''对话框。
3、在"NewUlControlw对话框中,用户可根据需要选择UlControl类型:
UIButtonControl:创建Button;
UIToolControl:创建与Map交互的Tool;
UIEditBoxControl:创建EditBox;
UIComboBoxControl:创建ComboBoxo
最后点击〈Create)按钮只创建UlControl或者点击〈CreateandEdit)按钮
创建UlControl并进入VBA编辑器。与方法一不同,此时应在UlControl的事件
中进行VBA编程。
图5Customize对话框
图6NewUlControl对话框
4、UlControl创建后,在图5所示的“Customize”对话框选中UlControl
并将其拖置到任意工具条上,用户便可象使用系统已有的Control一样使用所创
建的UlControl。
1.1.2.如何在VB环境中利用ArcObjects组件开发ActiveXDLL
1.1.1节讨论了如何在ArcGis的VBA环境中编程,虽然通过这种方式可以
完成大多数用户的定制需求,但是,在某些情况下,对于特殊的应用,用户需要
脱离ArcGIS环境而在VB开发环境中开发外部独立的应用程序,这种外部独立的
应用程序有两种形式:ActiveXDLL和StandardEXE。StandardEXE的开发将
在L1.4中讨论,本节将讨论ActiveXDLL的开发,其关键是引用ArcObjects
对象库和实现ArcObjects接口(例如ICommand,ITool,IToolBar等»
卜面介绍在VB环境利用ArcObjects组件开发ActiveXDLL的一般步骤。
1、㈣VB开发环境,在图7所示的“NewProject”对话框中选择“ActiveX
DLL”项,并点击(打开>按钮,进入VBE环境.
图7NewProject对话框
2、弓ArcObjects对象库:首先点击〈Project>菜单中的〈References〉项,
如图8,进入对象库引用对话框,如图9。
%Project1-MicrosoftVisualBasic[design]-1□!x
FileEditViewProjectFormatDebugRunQueryDiagramToolsAdd-InsWindowHelp
@H▼TDAddForm■遍宜且哲
配AddMDIForm
project-Project1
General|AddModule国图I回I
0AddClassModule
伤
回AddUserControlBProject1(Project:
3B&ClassModules
画AddPropertyPage
ARbi&Classi(Class:
向
□-lAddUserDocument
AddWebClass“I2J
AddDataReport[Properties-Classi
国理AddDHTMLPage|ClassiClassModule3
AddDataEnvironment
±1Alphabetic|Categorized|
dJ±JMoreActiveXDesigners...►
口AddFile...Ctrl+D
0Instancing
口RemoveClassiSetsavaluethatspecifies
Ewhetheryoucancreate
eiReferences...
|FormLayout
Components...Ctrl+T
量震
Project1Properties...
图8启动对象库引用对话框
图9对象库引用对话框
3、对象库引用对话框(图9)中选中"EsriArcMapObjectLibrary”和
“EsriObjectLibrary"两项,并点击<0K>按钮,返回VBE环境。
4、一般在类模块中写入实现特定ArcObjects接口的代码,如图10,然后
运行〈File〉菜单中的〈Makeproject】.dl1〉项,生成DLL文件,如图11。
(projectl.dll随项目名改变)。
图10类模块编辑窗口
1.1.3.如何在ArcMap中加载利用ArcObjects组件开发的ActiveXDLL
用户通过1.1.2中介绍的方法开发好一个ActiveXDLL程序后,便可根据实
际需要,在ArcMap环境下加载这个ActiveXDLL程序。其一般步骤如下:
1、用鼠标右击任何工具栏(条),点击弹出的上托式菜单中的〈Customize>
菜单项(参见图4)。
2、在Customize对话框中,根据被加载DLL的类型切换到“Toolbars"或
者KCommandsn页(参见图5),然后点击〈AddFromFile〉按钮。
3、在“打开文件”对话框中(Windows通用“打开文件”对话框,图略),
选择被加载的D11文件,并点击〈打开〉按钮。
4、如果加载是"Commands”,则在图5所示的对话框中显示加载的Command,
并可以将其拖置于任何工具条上;如果加载是“ToolBars”,则在图12所示的对
话框中显示加载的ToolBar,选中后即可在ArcMap中显示。
图12加载ToolBar
1.1.4.如何在VB环境中利用ArcObjects控件开发EXE
利用ArcObjects控件开发EXE的前三步类似于1.1.2中开发'AcrtiveDll”
的前三步,唯一不同的是在"NewProject”对话框中选择"StandardEXE"。
4、点击〈Project)菜单项中的〈Components》项,打开"Components”对话框,
如图13o
图References.,,
Components...Ctrl+T
Project1Properties..,
图13打开Components对话框
5、在"Components”对话框中,切换到Controls页,并选中“ESRIMapControl
项,点击〈应用〉或<确定>按钮,如图14。
图14Components对话框
6、如图15所示,加载MapControl控件之后,在VBE的控件面板中出现了
MapControl控件图标,用户便可以象在Form中添加Button一样在Form中添加
MapControl控件,并利用它开发EXE。
图15添加MapControl控件
1.2.用户界面
1.2.1.如何创建定制的按钮(Button)
本例要实现的是如何创建定制的按钮(Button)。
•要点
用户通过在类模块中实现ICommand接口来创建定制的按钮(COMcommand)o
ICommand接口包括caption>name>category、bitmap>message(StatusBarr
的提示信息)、tooltip(微帮助)、helpcontextid、helpfile^enabled
以及checked等十个属性和OnCreate>OnClick两个事件。从Icommand接
U的OnCreate事件中获取的ArcMap的Application实例必须用一个公共变量保
存,以便在其它事件中(或者其它接口的事件中甚至整个工程中)使用。
•OnCreate事件的参数hook传入的是一个Object,也就是ArcMAP的
Application实例,可把它赋给一个lApplication接口的变量,便获得了ArcMAP
的实例。
•在OnClick事件中写入相关代码,表示按下按钮时要实现的功能.
•程序说明
程序在类模块中实现Icommand接口来创建自己的按钮(Button)
•代码
OptionExplicit
'实现Icommand接口
ImplementsICommand
Dimm_pPictureasPicture
Dimm_pApplicationAslApplication
PrivateSubClass_Initialize()
'调入.RES文件中ID为101的BitMap作为该按钮的显示图片
Setm_pPicture:LoadResPicture(101,vbResBitmap)
EndSub
PrivatePropertyGetICommand_Bitmap()AsesriCore.OLE_HANDLE
ICommand_Bitmap二m_pPicture
EndProperty
PrivatePropertyGetICommandCaption()AsString
ICommand_Caption="CreateButton*
EndProperty
PrivatePropertyGetICommandCategory()AsString
ICommandCategory="CreateButton”
EndProperty
PrivatePropertyGetICommandChecked()AsBoolean
EndProperty
PrivatePropertyGetICommand_Enabled()AsBoolean
ICommand_Enabled=True
EnclProperty
PrivatePropertyGetICommandHelpContextlDOAsLong
EndProperty
PrivatePropertyGetICommandHe1pFi1e()AsString
EndProperty
PrivatePropertyGetICommand_Message()AsString
EndProperty
PrivatePropertyGet[CommandNameOAsString
ICommandName="CreateButton”
EndProperty
PrivateSubICommandOnClickO
'加入按卜按钮时袤现的功能代码。在这里,
'按钮按下时显示ArcMap的Document的Tittle
DimpDocumentAsIDocument
SetpDocument=m_pApplication.Document
MsgBoxpDocument.Title
EndSub
PrivateSubICommand_OnCreate(ByVaihookAsObject)
'获取ArcMap的Application实例
Setm_pApplication=hook
EndSub
PrivatePropertyGetICommand_Too11ip()AsString
ICommand_Tooltip="CreateButton”
EnclProperty
1.2.2.如何创建定制的Tool
本例要实现的是如何创建定制的Tool
・要点
用户在类模块中实现【command(参见1.2.1)和ITool接口。ITool接口包
括mousemove,mousebuttonpress/release,keyboardkeypress/release,
double-click以及rightclick等事件、Cursor属性和Refresh方法。
Tool既具有Button的功能,又具有与ArcMAP界面交互的功能,Button的
功能代码必须写在Icommand的OnClick事件中,而所有实现交互功能的代码必
须写在Itool接口的各个事件中。Itool接口的各个事件,用户可以在其中写入
相关代码,表示用户与ArcMAP界面交互时一旦触发某事件要实现的功能。
•程序说明
程序在类模块中实现【command和Itool接口来创建自己的Tool.
•代码
OptionExplicit
'实现【command和Itool接口
ImplementsICommand
ImplementsITool
Dimm_pApplicationAslApplication
DimmpBitmapAsIPictureDisp
DimmpCursorAsIpictureDisp
PrivateSubClass_Initialize()
SetmpBitmap二LoadResPicture(101,0)
'从.RES文件中调入ID为102的图片作为按下Tool后的MouseCursor
Setm_pCursor=LoadResPicture(102,2)
EndSub
PrivatePropertyGetICommandBitmap()AsesriCore.OLE_HANDLE
ICommandBitmap=mpBitmap
EndProperty
PrivateProperlyGetICommandCaption()AsString
1CommandCaption="MyTool”
EndProperty
PrivatePropertyGetICommandCategory()AsString
ICommandCategory-"MyCuslomTools”
EndProperty
PrivatePropertyGetICommand_Checked()AsBoolean
EnclProperty
PrivatePropertyGetICommandEnabled()AsBoolean
ICommand_Enabled=True
EndProperty
PrivatePropertyGetICommandHelpContextIDOAsLong
EndProperty
PrivatePropertyGetICommand_HelpFile()AsString
EnclProperty
PrivatePropertyGetICommand_Message()AsString
ICommand_Message="Thisismycustomtool”
EndProperty
PrivatePropertyGetICommandName0AsString
ICommand_Name="MyCustomToo】_MyTool”
EndProperty
PrivateSubICommandOnC1ick()
'加入按下按钮时正现的功能代码
MsgBox"Clickedonmycommand”
EndSub
PrivateSubICommand_OnCreate(ByValhookAsObject)
'获取ArcMAP的Application实例
SetmjpAppMeation=hook
EndSub
PrivatePropertyGelICommand!oo11ip()AsString
ICommandTooltip="MyTool”
EndProperty
PrivatePropertyGetIToolCursor()AsesriCore.OLEHANDLE
ITool_Cursor=m_pCursor
EndProperty
PrivateFunctionITool_Deactivate()AsBoolean
'如果IToolDeactivate设为False,则Tool不可用
ITool_Deactivate=True
EnclFunction
PrivateFunctionIToolOnContextMenu(ByVaiXAsLong,ByVaiYAsLong)AsBoolean
'在这里可以加入用户代码,点击Mouse右键时显示一个定制的contextmenu
EndFunction
PrivateSubITool_0nDblClick()
’在这里加入Mouse双击时的功能代码
EndSub
PrivateSubITool_OnKeyDown(ByVaikeyCodeAsLong,ByVaiShiftAsLong)
EndSub
PrivateSubIToolOnKeyllp(ByValkeyCodeAsLong,ByVaiShiftAsLong)
EndSub
PrivateSubITool_OnMouseDown(ByVaiButtonAsLong,ByVaiShiftAsLong,_
ByVaiXAsLong,ByVaiYAsLong)
'加入Mouse单击时的功能代码
IfButton=1Then
DimpPointAsIPoint
DimpMxApplicationAsIMxApplication
SetpMxApplication二mpApp
SetpPoint=pMxApplication.Display.DisplayTransformation.ToMapPoint(X,Y)
m_pApplication.StatusBar.Message(0)=Str(pPoint.X)&&Str(pPoint.Y)
EndIf
EndSub
PrivateSubIToolOnMouseMove(ByVaiButtonAsLong,ByVaiShiftAsLong,
ByVaiXAsLong,ByVaiYAsLong)
,加入Mouse移动时的功能代码
m_pApplication.StatusBar.Message(0)="ITool_0nMouseMove”
EnclSub
PrivateSubITool_0nMouseUp(ByVaiButtonAsLong,ByVaiShiftAsLong,_
ByVaiXAsLong,ByVaiYAsLong)
'加入释放Mouse时的功能代码
m_pApplication.StatusBar.Message(0)="IToolOnMouseUp”
EndSub
PrivateSubIToolRefresh(ByVaihDCAsesriCore.OLE_HANDLE)
EndSub
1.2.3.如何创建定制的工具条(ToolBar)
本例要实现的是如何创建定制的工具条(ToolBar)o就必须在类模块中实现
IToolBarDef接口。IToolBarD6f接口包括Caption、ItemCount及Name三个属
性和Getltemlnfo方法。
•要点
通过在类模块中实现IToolBarDef接口。IToolBarDef接口包括Caption、
ItemCount及Name三个属性和Getltemlnfo方法。
•ItemCount属性表示ToolBar显示的条目(Button、Tool或其它控件)数。
,Getltemlnfo方法定义工具条上各条目的CLSID,其中,参数pos表示条
目在ToolBar中的位置,是定义相应位置的条目的IltemDef对象。
•工具条条目的CLSID分为两种:
1、系统CLSID,代表ArcGIS的一个功能,其引用方式为"esriCore.命令名
称",如"esriCore.AddDataCommand"、"esriCore.FileSaveCommand”等。
2、用户定制CLSID,表示用户自己定义的功能。其引用方式为"工程名称.定
制功能类名称",如"ToolBarDef.ClsBar必须注意,这里“定制功能类名称”
是工程中实现的一个功能类名称,“工程名称”即为当前工程的名称(不是DLL
文件名,也不是工具条的名称),每次新建一个工程时,系统默认的工程名在某
些情况下无法使用(在中文版的VB中是一个乱字符),必须改名后方能用。
•程序说明
程序在类模块中实现IToolBarDef接口来创建自己的工具条(ToolBar)。
•代码
OptionExplicit
ImplementsIToolBarDef
PrivatePropertyGetIToo1BarDef_Caption()AsString
IToolBarDefCaption="CuslomToolBar”
EndProperty
PrivateSubIToo1BarDef_Ge111emInfo(ByVaiposAsLong,ByVaiitemDefAs_
esriCore.IltemDef)
'这里假设在当前工程(工程名称为ToolBarDof)中定义了一个类模块(名为CisBar),
'它实现了Icommand接口(可参照1.2.1)
SelectCasepos
Case0
'用户自定义条目
itemDef.ID="ToolBarDef.ClsBar”
itemDef.Group=False
Case1
'系统条目
itemDef.ID-^esriCore.AddDataCommand*
itemDef.Group=False
EndSelect
EndSub
PrivatePropertyGetIToolBarDefItemCount()AsLong
IToolBarDefItemCount=2
EndProperty
PrivatePropertyGetIToolBarDefName()AsString
IToo1BarDef_Name=*CuslomToolBar*
EndProperty
1.2.4.如何创建定制的Multiltem
本例要实现的是如何创建定制的Mu11iItemo
•要点
需要实现[MultiItem接口,但不需要同时实现Icommand接口。IMultiltem
接口包括Caption,itemCaption,ItemBitmap,ItemEnabled,ItemChecked,
Message及Name等属性和OnltemClick,OnPopup事件。
,itemCaption,ItemBitmap,ItemEnabled,ItemChecked等属性的参数index
表示当前Item的下标索引。
,OnPopup事件的参数hook同Icommand接口的OnCreate事件的参数hook
一样,传入ArcGIS的Application实例,同时,该事件返回将要显示的Item
数目。
•OnltemClick事件的参数Index表示用户当前点击的Item的索引,用户根
据该索引分别定义点击各个Item时实现的功能。
•程序说明
程序在类模块中实现IMultiltem接口来创建定制自己的Multiltem。
•代码
OptionExplicit
ImplementsIMultiltem
Privatem_pAppAslApplication
'ArcMap的Document
Privatem_pMxDocAsTMxDocument
'当前FocusMap
PrivatempMapAsIMap
,Map中的层数
Privatem_pLayerCntAsLong
PrivatePropertyGetIMu11iItemCaption()AsString
IMultiltemCaption=*ZoomToLaycrs*
EndProperty
PrivatePropertyGetIMultiItem_HelpContextTD()AsLong
EndProperty
PrivatePropertyGetIMultiItem_HelpFile()AsString
EndProperty
PrivatePropertyGelIMultiIlemItemBitmap(ByVaiIndexAsLong)AsesriCore.OLE_HANDLE
EndProperty
PrivatePropertyGet[Mu11i11em_ItemCaption(ByVaiIndexAsLong)AsString
DimiAsInteger
‘遍历每一个层
Fori=0Tom_pLayerCnt-1
'如果层号与当前Item的Index相同,就设置该Item的Caption
IfIndex=iThen
IMultiItem_ItemCaption="Zoomto*&m_pMap.Layer(i).Name
EndIf
Next
EndProperty
PrivatePropertyGetIMu11iItem_ItemChecked(ByVaiIndexAsLong)AsBoolean
EnclProperty
PrivatePropertyGetIMu11i11em11emEnab1ed(ByVaiIndexAsLong)AsBoolean
DimiAsInteger
'遍历每•个层
Fori=0Tom_pLayerCnt-1
'如果层号与当前Item的Index相同,则当前Item的Enable根据该层的Visible设置。
IfIndex=iThen
Ifm_pMap.Layer(i).VisibleThen
TMultiItem_ItemEnabled=True
EndIf
EndIf
Next
EndProperty
PrivatePropertyGelIMu11iItemMessage()AsString
IMultiltemMessage="Zoomstothelayer.
EndProperty
PrivatePropertyGetIMultiItem_Name()AsString
IMultiItemName="ZoomMulti”
EndProperty
PrivateSubIMultiItem_OnItemClick(ByValIndexAsLong)
DimiAsInteger
DimpEnvAsIEnvelope
DimmBookMarkAsIAOIBookmark
'遍店每一个层
Fori=0Tom_pLayerCnt-1
'如果层号与当前Item的Index相同,则以该层的AreaOfIn
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年延吉市医院招聘考试备考题库及答案解析
- 2026中国旅游集团校园招聘笔试备考题库及答案解析
- 2026商水豫东平民医院招聘38人笔试参考题库及答案解析
- 2026年枣庄市口腔医院急需紧缺人才引进(5名)笔试参考题库及答案解析
- 2026中国能建黑龙江院校园招聘考试备考题库及答案解析
- 2026年西安碑林区柏树林社区卫生服务中心志愿者招募笔试参考题库及答案解析
- 东营市科达小学公开招聘劳务派遣教师笔试备考题库及答案解析
- 2025-2026学年浙江温州第四中学初三摸底联考(全国卷)英语试题试卷含解析
- 2026届浙江省衢州市菁才中学第一次中考模拟考试英语试题含解析
- 重庆市万盛经济技术开发区关坝中学2026届初三数学试题二模冲刺试题(五)含解析
- 2025年广西润象信息网络工程有限公司招聘笔试参考题库含答案解析
- 2024年甘肃省高等职业教育分类考试招生中职升学考试公共基础试题数学试题
- 毕业设计(论文)-7m3连续搅拌釜式反应器设计
- 六年级下册部编版道德与法治全册教案
- 保安员测试试题库含答案
- 2024年镇江市高等专科学校高职单招职业适应性测试历年参考题库含答案解析
- 食品卫生安全保障、食品配送服务方案
- 机械工程材料课件-
- 【历史】安史之乱与唐朝衰亡课件+2024-2025学年部编版七年级历史下学期
- 一例尿路感染的病例讨论课件
- 220kV主变输变电改扩建工程施工组织设计
评论
0/150
提交评论