|
|
|
|

《ArcGIS Engine+C#实例开发教程》第七讲 图层符号选择器的实现

教程目录: 第一讲 桌面GIS应用程序框架的建立 第二讲 菜单的添加及其实现 第三讲 MapControl与PageLayoutControl同步 第四讲 状态栏信息的添加与实现 第五讲 鹰眼的实现 第六讲 右键菜单添加与实现 教程Bug及优化方案1 第七讲 图层符号选择器...

作者:3SDN.Net来源:3SDN原创|2009年05月12日

 

教程目录:

第一讲 桌面GIS应用程序框架的建立

第二讲 菜单的添加及其实现

第三讲 MapControl与PageLayoutControl同步

第四讲 状态栏信息的添加与实现

第五讲 鹰眼的实现

第六讲 右键菜单添加与实现

教程Bug及优化方案1

第七讲 图层符号选择器的实现1

第七讲 图层符号选择器的实现2

第八讲 属性数据表的查询显示

------------------------------------------------------------------

在上一讲中,我们实现了右键菜单( 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 事件。

因为种方法不是本讲的重点,故不对代码进行分析,有兴趣的读者请自行理解或结合后面的内容理解。代码如下:

 private void axTOCControl1_OnDoubleClick(object sender, ITOCControlEvents_OnDoubleClickEvent e)

{

    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();

        }

    }

}

4 )编译运行即可。

上一篇:《ArcGIS Engine+C#实例开发教程》教程Bu…

下一篇:《ArcGIS Engine+C#实例开发教程》第七讲…