在线学习平台
微信扫码登录
利用ArcGIS Engine、VS .NET和Windows控件开发GIS应用(七)
摘要:
(十一) 自定义 ToolbarControl
同在 Form_Load 事件中向 ToolbarControl 控件增加 ArcGIS Engine 命令和工具一样,你也可以使用定制对话框和自定义 ToolbarControl 的方式添加命令和工具。要实现它,就要将 ToolbarControl 置为定制模式并显示定制对话框。
1. 向类中增加下列成员变量:
……
private ITransformEvents_VisibleBoundsUpdatedEventHandler
visBoundsUpdatedE; // PageLayoutControl 的焦点图事件
private ICustomizeDialog m_CustomizeDialog = new
CustomizeDialogClass(); // CurtomizeDialog 被ToolbarControl 使用
private ICustomizeDialogEvents_OnStartDialogEventHandler
startDialogE; // CustomizeDialog 启动事件
private ICustomizeDialogEvents_OnCloseDialogEventHandler
closeDialogE; // CustomizeDialog 关闭事件
……
注: Visual Studio .NET 提供了当程序集对 COM interop 开放时执行的函数在系统中被注册和取消注册的功能。这就允许你在定制对话框可能找到的组件目录中注册你自己的类。
2. 创建一个叫 CreateCustomizeDialog 的新函数,这个函数是你通过增加如下代码创建自定义对话框的地方。
private void CreateCustomizeDialog()
{
// 设置自定义对话框事件
= new
ICustomizeDialogEvents_OnStartDialog);
((ICustomizeDialogEvents_Event_CustomizeDialog).OnStartDialog +=
;
= new
ICustomizeDialogEvents_OnCloseDialog);
((ICustomizeDialogEvents_Event_CustomizeDialog).OnCloseDialog +=
;
// 设置标题
m_CustomizeDialog.DialogTitle = "自定义ToolbarControl 项目";
// 显示“从文件添加”按钮
m_CustomizeDialog.ShowAddFromFile = true ;
// 设置将增加新项目的ToolbarControl
m_axToolbarControl1);
}
注:设置ComVisible 属性为false 确保此方法不能被COM 客户端直接调用。当程序集通过COM 注册时,它不影响被调用的方法。
3. 在 Form_Load 事件中调用 CreateOverviewSymbol 子过程以前调用 CreateCustomizeDialog 函数。
private void Form1_Load(object sender, System.EventArgs e)
{
// 当缩放时禁止重绘
this .SetStyle( ControlStyles.EnableNotifyMessage, true );
// 为ToolbarControl 创建自定义对话框
);
……
}
4. 在窗体上增加一个名叫“ chkCustomize ”的复选框,并将标题命名为“定制”。
5. 在设计模式显示窗体并从属性窗口选择 chkCustomize 控件,显示 chkCustomize 事件。在 CheckedChanged 事件上双击向代码窗口增加相应的事件处理。
6. 向 chkCustomize_CheckedChanged 事件中增加下列代码。
private void chkCustomize_CheckedChanged(object sender, System.EventArgs e)
{
// 显示或隐藏自定义对话框
if (chkCustomize.Checked == false )
{
m_);
axToolbarControl1.Customize = false ;
}
else
{
m_axToolbarControl1.hWnd);
axToolbarControl1.Customize = true ;
}
}
7. 增加OnStartDialog 和 OnCloseDialog 事件处理函数。这些函数将与自定义对话框打开或关闭时触发的事件紧密连接。
private void OnStartDialog()
{
axToolbarControl1.Customize = true ;
}
private void OnCloseDialog()
{
axToolbarControl1.Customize = false ;
chkCustomize.Checked = false ;
}
8. 生成并运行应用程序,选择定制复选框使 ToolbarControl 进入自定义模式,并打开自定义对话框。
9. 在自定义 ToolbarControl 项目对话框中的左边目录( Categories )列表中选择“ Graphic Element ”项,然后在右边的命令( Commands )列表中“ Select Elements ”项上双击将其加入到 ToolbarControl 工具栏中。右键点击 ToolbarControl 上的任何一个项目,你可以调整它的显示样式和组合特性。
10. 结束定制应用。使用选择工具移动包含日期的文本元素。
六、 部署
要将应用程序成功地部署到另一台机器上,必须为应用程序配置协议。首先,它必须检查产品协议是否有效,其次,它必须初始化协议。如果协议配置不正确有,应用程序将不能运行。
注:当采用 ESRI ArcObjects 开发独立运行的程序时,应用程序负责检查并配置协议选项。它通过实现 CoClass AoInitialize 和 IAoInitialize 接口来支持协议配置。应用程序运行时,在任何 ESRI ArcObject 功能被访问之前协议初始化必须先被执行。如果初始化失败将导致应用程序错误。
1. 向类中增加下列成员变量。
public class Form1 : System.Windows.Forms.Form
{
private ESRI.ArcGIS.MapControl.AxMapControl axMapControl1;
private ESRI.ArcGIS.PageLayoutControl.AxPageLayoutControl axPageLayoutControl1;
private ESRI.ArcGIS.TOCControl.AxTOCControl axTOCControl1;
private ESRI.ArcGIS.ToolbarControl.AxToolbarControl axToolbarControl1;
// 应用初始化对象
private IAoInitialize m_AoInitialize = new AoInitializeClass();
// 后面是弹出菜单变量声明代码
……
2. 在 Form_Load 事件的最开始位置增加下列代码。
private void Form1_Load(object sender, System.EventArgs e)
{
// 创建新的AoInitialize 对象
if ( m_AoInitialize == null )
{
"初始化失败,程序不能运行!");
this .Close( );
}
// 判断产品是否有效
licenseStatus = (esriLicenseStatus)
m_
esriLicenseProductCode.esriLicenseProductCodeEngine);
if (licenseStatus == esriLicenseStatus.esriLicenseAvailable )
{
= (esriLicenseStatus)
m_esriLicenseProductCode.esriLicenseProductCodeEngine);
if (licenseStatus != esriLicenseStatus.esriLicenseCheckedOut )
{
"初始化失败,应用程序不能运行!");
this .Close( );
}
}
else
{
"ArcGIS Engine产品无效,此程序不能运行!");
this .Close( );
}
// 当缩放时禁止重绘
this .SetStyle( ControlStyles.EnableNotifyMessage, true );
// 后面是创建自定义对话框的代码……
……
}
3. 在设计模式显示窗体并在属性窗口选择 Form1 ,显示窗体事件。在 Closing 事件上双击向代码窗口增加事件处理代码。
4. 在 Form_Closing 事件中增加以下代码:
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
// 释放COM 对象并关闭AoInitialize 对象
);
m_);
}
5. 在 Release 模式下生成项目和解决方案。
要将应用程序成功地部署到用户机器上:
l 要将应用程序的可执行文件和包含自定义命令的动态链接库 DLL 发布到用户机器上。程序工具( RegAsm.exe )必须被用来向注册表增加关于自定义类的信息。
l 用户机器上需要安装有 ArcGIS Engine 运行时库和 标准 ArcGIS Engine 协议。
l 客户机上需要安装 Microsoft .NET Framework 1.1 。
七、 附加资源
下列资源可以帮助你理解和应用在本方案中在在的概念和技术。
l 在 ArcGIS Engine 开发工具包中包含了其他可用的文档: ArcGIS 开发帮助,组件帮助,对象模型图表和适合于初学者的样例程序。
l ArcGIS 开发在线——一个 Web 站点,提供了最新的 ArcGIS 开发信息,包括程序样例和技术文档。http://arcgisdeveloperonline.esri.com
l ESRI 在线讨论组—— Web 站点,从其他 ArcGIS 开发者提供无偿援助。http://support.esri.com 并点击用户论坛页签。
l 微软 Visual Studio .NET 开发环境中的文档。