ArcGIS对基于桌面产品Desktop开发提供了两种方式:Desktop Add-ins和Extending ArcObjects。Add-Ins开发方式是最大化使用桌面产品现有的功能,安装部署方便;但在AO扩展、界面定制上不如Extending方式强大、灵活。本文主要介绍如何使用donet工程提供的Extending ArcObjects模板构建一个Desktop开发框架
模板工程建立
创建 Windows Application(Desktop)工程
添加使用的ArcGIS类库,下一步继续。这一步在此处可以跳过,在代码编写过程中再添加用到的类库。
勾选工程所需的ArcGIS产品级别及相关的功能扩展。ArcGIS桌面产品开发提供了ArcVIew、ArcEditor、ArcInfo三个产品级别,如下图选择了ArcInfo;在Extensions列表中可以选择程序所使用的ArcGIS扩展,如果工程要做三维开发、网络分析功能开发则需要勾选3DAnalyst、Network Analyst,如下图所示。
启动ArcMap进程
在启动系统登录前可先做个用户验证,在验证过程中启动ArcMap进程。
具体代码如下:
privatevoid btnLogin_Click(object sender, EventArgs e)
{
//用户登录验证过程
//******略*******
//***************
newProjectStart().ProjectStart();
this.Hide();
System.Environment.Exit(0);
}
public classProjectStart
{
public void StartProject ()
{
//启动ArcMap进程
IDocumentdoc = newMxDocumentClass();
IApplication m_ArcGisApp = doc.Parent;
m_ArcGisApp.Caption = “信息管理系统“;
m_ArcGisApp.Visible =true;
}
}
启动界面如下图所示
添加自定义菜单
向工程中添加工程类库
向新建的类库中添加两个Button按钮cmd1、cmd2
重复上面的步骤在添加一个按钮,至此新建的类库中便有了两个按钮cmd1、cmd2
双击打开其中一个按钮的代码文件,如打开cmd1.cs,如下图所示
其中,Guid、ProgId是系统自动建立的,保持默认不去修改;而,m_category、m_caption、m_message、m_tooltip、m_name可根据需要自行修改。
下面要做的是在启动ArcMap时将这些按钮添加的ArcMap界面上
publicvoid StartProject()
{
IDocument doc = newMxDocumentClass();
IApplication m_ArcGisApp = doc.Parent;
ICommandBar cmdBar = (ICommandBar)doc.CommandBars.Find(“Main menu”, false, false);
//添加自定义按钮
UID cmdUid = newUIDClass();
object bj = null;
cmdBar = cmdBar.CreateMenu(“自定义1″, refobj);
cmdUid.Value = “{d40ae57e-0ca9-4e26-a78a-58eade156816}”;
cmdBar.Add(cmdUid, ref obj).Style. = esriCommandStyles.esriCommandStyleIconAndText;
cmdUid = newUIDClass();
cmdUid.Value = “{27f74b3b-fa26-4389-88d8-2495a13ca1a1}”;
cmdBar.Add(cmdUid, ref obj).Style. = esriCommandStyles.esriCommandStyleIconAndText;
m_ArcGisApp.Caption = “信息管理系统“;
m_ArcGisApp.Visible = true;
}
运行界面如下:
清除ArcMap原有菜单
很多情况下,系统的界面是根据我们实际的需求重新定制的,所以需要我们将原有的菜单、工具条全部清除掉。在程序中添加下面代码即可完成清除所有的菜单、按钮。
IDocumentdoc = newMxDocumentClass();
IApplicationm_ArcGisApp = doc.Parent;
doc.CommandBars.HideAllToolbars();
intpcount = cmdBar.Count;
//清理菜单
for (int i = pcount-1;i>-1 ; –i)
{
ICommandItem p = cmdBar[i];
p.Delete();
}
doc.CommandBars.HideAllToolbars();
还有些时候,我们要实现的功能ArcMap已经自带,这样我们在定制界面的时候可以保留这部分功能,减少系统开发工作量。
保留文件菜单、视图菜单内容,代码如下
IDocumentdoc = newMxDocumentClass();
IApplicationm_ArcGisApp = doc.Parent;
doc.CommandBars.HideAllToolbars();
intpcount = cmdBar.Count;
//清理菜单
for (int i = pcount-1;i>-1 ; –i)
{
ICommandItem p = cmdBar[i];
if (p.Name != “View_Menu” && p.Name != “File_Menu”)
p.Delete();
}
doc.CommandBars.HideAllToolbars();
至此一个ArcGISDesktop开发框架搭建完毕,至于界面上有哪些按钮、菜单、工具条等需要根据实际的系统开发需求来规划、定制。