《ArcGIS Engine+C#实例开发教程》第七讲 图层符号选择器的实现
教程目录: 第一讲 桌面GIS应用程序框架的建立 第二讲 菜单的添加及其实现 第三讲 MapControl与PageLayoutControl同步 第四讲 状态栏信息的添加与实现 第五讲 鹰眼的实现 第六讲 右键菜单添加与实现 教程Bug及优化方案1 第七讲 图层符号选择器...
- 作者:3SDN.Net来源:3SDN原创|2009年05月12日
教程目录:
第三讲 MapControl与PageLayoutControl同步
第八讲 属性数据表的查询显示
------------------------------------------------------------------
在上一讲中,我们实现了右键菜单( ContextMenu )的添加与实现,在最后我预留给下一讲的问题是 TOCControl 控件图层拖拽的实现。后来发现此功能的实现异常简单,只要在 TOCControl 的属性页中,勾选“ Enable Layer Drag and Drop ”即可。
这一讲,我们要实现的是图层符号选择器,与 ArcMap 中的 Symbol Selector 的类似。本讲较前几讲而言,些许有些复杂,不过只要仔细琢磨,认真操作,你就很容易实现如下所示的符号选择器。因为本讲篇幅较长,故我将其分成两个阶段,本文是第一阶段。
图 1
在 AE 开发中,符号选择器有两种实现方式。
一是在程序中直接调用 ArcMap 中的符号选择器,如下所示:
图 2
二是自定义符号选择器,如图 1 所示。
由于第一种方式前提是必须安装 ARCGIS Desktop ,其界面还是英文的,而对二次开发来说,大部分用户希望应该是中文界面。因此开发人员通常选择第二种方式,本讲也着重讲解第二种方式。
通过对《 ARCGIS Engine+C# 实例开发教程》前六讲的学习,我已经假定你已经基本熟悉 C# 语言和 VS2005 的操作,故在下面的教程中,我不准备说明每一步骤的具体操作方法,而只是说明操作步骤,以节省时间和篇幅。
|
1. 直接调用 ArcMap 中的符号选择器
( 1 )添加 ESRI.ARCGIS.DisplayUI 的引用。
分别在解决方案管理器和代码中添加引用。
( 2 )添加 TOCControl 的 Double_Click 事件。
( 3 )实现 TOCControl 的 Double_Click 事件。
因为种方法不是本讲的重点,故不对代码进行分析,有兴趣的读者请自行理解或结合后面的内容理解。代码如下:
{
esriTOCControlItem toccItem = esriTOCControlItem.esriTOCControlItemNone;
ILayer iLayer = null;
IBasicMap iBasicMap = null;
object unk = null;
object data = null;
if (e.button == 1)
{
axTOCControl1.HitTest(e.x, e.y, ref toccItem, ref iBasicMap, ref iLayer, ref unk,
ref data);
System.Drawing.Point pos = new System.Drawing.Point(e.x, e.y);
if (toccItem == esriTOCControlItem.esriTOCControlItemLegendClass)
{
ESRI.ARCGIS.Carto.ILegendClass pLC = new LegendClassClass();
ESRI.ARCGIS.Carto.ILegendGroup pLG = new LegendGroupClass();
if (unk is ILegendGroup)
{
pLG = (ILegendGroup)unk;
}
pLC = pLG.get_Class((int)data);
ISymbol pSym;
pSym = pLC.Symbol;
ESRI.ArcGIS.DisplayUI.ISymbolSelector pSS = new
ESRI.ArcGIS.DisplayUI.SymbolSelectorClass();
bool bOK = false;
pSS.AddSymbol(pSym);
bOK = pSS.SelectSymbol(0);
if (bOK)
{
pLC.Symbol = pSS.GetSymbolAt(0);
}
this.axMapControl1.ActiveView.Refresh();
this.axTOCControl1.Refresh();
}
}
}
private void axTOCControl1_OnDoubleClick(object sender, ITOCControlEvents_OnDoubleClickEvent e)
( 4 )编译运行即可。