当前位置:软件学习 > 其它软件 >>

连载-基于插件技术的GIS应用框架(C# + ArcEngine9.3)(三)

[align=center]基于插件技术的GIS应用框架(C# + ArcEngine9.3)(三)

                                        -------------------------插件的分类[/align]

   我们在进行GIS框架的开发时,有个问题必须先得明确下来,这就是你的插件具体有哪些表现形式,这直接关系到你的框架接口的设计、插件的加载及保存。具体一点,就是说,你的界面上将会出现哪些UI元素,如何进行管理。例如:Combobox、Edit、MenuItem诸如此类的插件。看过一些文章,大都具有子菜单的菜单项和工具栏都当做插件来处理,在本文论及的框架中,没有此类插件,但却同样做到了统一加载,统一管理。

    一、命令插件 IAxCommand

    接口定义:

    public inte易做图ce IAxCommand : PluginEngine.Inte易做图ce.IAxPlugin
    {

    }

    这个接口没有任何属性方法,实际上加载到本文框架中的命令插件和工具插件必须分别实现esriSystemUI.ICommand接口和esriSystemUI.ITool接口,这里声明IAxCommand接口只是为了方便插件池对象对所有命令和工具进行管理而已,后面会有所提及。

 

    二、工具插件 IAxTool

    接口定义:

    public inte易做图ce IAxTool : PluginEngine.Inte易做图ce.IAxPlugin
    {       
        IPoint SnappedPoint { get; } //捕捉到的点
    }

    大家可以发现,这个接口只有一个属性,实际上,在本文框架中,为了改变ArcMap那种只有草图工具可以进行捕捉的尴尬,对于捕捉的环境、捕捉代理的代码全由自己实现,这样一来,对于想要进行捕捉的其他ITool接口实现类,只要同时实现 IAxTool 接口就能进行捕捉了。

 

    三、列表框插件 IAxCombobox

    接口定义:

    /// 下拉列表插件接口
    public inte易做图ce IAxCombobox : PluginEngine.Inte易做图ce.IAxPlugin
    {
        /// 下拉列表的名称
        string Name { get; }
        /// 下拉列表的标题
        string Caption { get; }
        /// 是否显示标题
        bool ShowCaption { get; }
        /// 下拉列表的Items
        System.Collections.ICollection Items { get; }
        /// 下拉列表的文字
        string Text { get; }
        /// 下拉列表的类别
        string Category { get; }
        /// 下拉列表是否可用
        bool Enabled { get; }
        /// 下拉列表是否可编辑
        bool Editable { get; }
        /// 下拉列表的宽度
        int Width { get; }
        /// 下拉列表下拉的最大行数
        int DropDownRows { get; }
        /// 提示文字
        string Tooltip { get; }
        /// 出现在状态栏的消息文字
        string Message { get; }
        /// KeyPress事件
        void OnKeyPress();
        /// KeyDown事件
        void OnKeyDown();
        /// EditValueChanged事件
        void EditValueChanged(string newText);
        /// 列表创建时触发的方法
        /// <param name="hook">框架对象</param>
        void OnCreate(IAxApplication hook);
    }

    对于一个下拉列表类型的插件,我们只需要定义上面这些属性和方法、事件差不多就够了,后续章节中,我就针对编辑任务列表这个下拉列表插件做详细介绍。

 

    四、编辑框插件 IAxEdit

    接口定义:
    public inte易做图ce IAxEdit : PluginEngine.Inte易做图ce.IAxPlugin
    {
        /// 编辑框的名称
        string Name { get; }
        /// 编辑框的标题
        string Caption { get; }
        /// 是否显示标题
        bool ShowCaption { get; }
        /// 编辑框的文字
        string Text { get; }
        /// 编辑框的类别
        string Category { get; }
        /// 编辑框是否可用
        bool Enabled { get; }
        /// 编辑框是否只读
        bool ReadOnly { get; }
        /// 编辑框的宽度
        int Width { get; }
        string Tooltip { get; }

        ///状态栏消息
        string Message { get; }
        /// KeyPress事件
        void OnKeyPress();
        /// KeyDown事件
        void OnKeyDown();
        /// 编辑框创建时触发的方法
        /// <param name="hook">框架的对象</param>
        void OnCreate(IAxApplication hook);
    }

    定义这个插件接口,可以显示诸如地图比例尺信息等。

 

    五、菜单组插件 IAxSubItem

    接口定义:

    public inte易做图ce IAxSubItem : PluginEngine.Inte易做图ce.IAxPlugin
    {
        /// 子菜单的文字
        string Caption { get; }
        /// 子菜单所属的类别
        string Category { get; }
        /// 子菜单名称
        string Name { get; }
        /// 子菜单宽度
        int Width { get; }
        /// 子菜单产生是触发的方法
        /// <param name="hook">框架对象</param>
        int Visible { get; }   //-1-Never, 0-OnlyInCustomizing, 1-Always

        void OnCreate(IAxApplication hook);
    }

    IAxSubItem这个接口实际上是个容器接口,在最终加载这个插件的时候,寄宿于其之上的其他插件对象都通过XML配置文件有所记录。

 

    六、视图插件 IAxContentsView

    接口定义:

    public inte易做图ce IAxContentsView : PluginEngine.Inte易做图ce.IAxPlugin
    {

        /// 位图 
        int Bitmap { get; }
        /// 句柄
        int hWnd { get; }
        /// 名称
        string Name { get; }
        /// 标题
        string Caption { get; }
        /// 子控件
        System.Windows.Forms.Control ObjecthWnd{ get; }
        /// 是否可见
        bool Visible { get; set; }
        /// 视图的页号
        int Index { get; set; }
        /// 视图当前选择的对象

        object SelectedItem { get; }
        /// OnCreate
        void OnCreate(IAxApplication hook);
        /// Refresh
        void Refresh();   
    }

    视图插件其实就类似于C#组件TabControl里的一个页对象,TOC视图就可以实现这个接口从而加载到框架里来。

 

    七、停靠窗体插件 IAxDockableWindow

    接口定义
    /// 停靠窗体接口
    public inte易做图ce IAxDockableWindowDef : PluginEngine.Inte易做图ce.IAxPlugin
    {
        /// 标题
        string Caption { get; }
        /// 停靠窗体对象句柄
        System.Windows.Forms.Control ObjecthWnd { get; }
        /// 名称
        string Name { get; }
        /// 默认停靠位置
        DevExpress.XtraBars.Docking.DockingStyle DefaultDock { get; }
        /// 构建方法
        /// <param name="hook"></param>
        void OnCreate(IAxApplication hook);
        /// OnDestory
        void OnDestory();
    }

 

    八、颜色编辑框插件 IAxColorPicker

    接口定义:
    /// 颜色提取器插件接口
    public inte易做图ce IAxColorPicker : PluginEngine.Inte易做图ce.IAxPlugin
    {

        /// 位图

        int Bitmap { get; }
        /// 颜色提取器的名称
        string Name { get; }
        /// 颜色提取器的标题
        string Caption { get; }
        /// 是否显示标题
        bool ShowCaption { get; }
        /// 颜色提取器的类别
        string Category { get; }
        /// 颜色提取器是否可用
        bool Enabled { get; }
        /// 颜色提取器的宽度
        int Width { get; }
        /// 提示文字
        string Tooltip { get; }
        ///状态栏消息
        string Message { get; }
        /// EditValueChanged事件
        void EditValueChanged(string newText);
        /// 颜色提取器创建时触发的方法
        /// <param name="hook">框架对象</param>
        void OnCreate(IAxApplication hook);
    }

--------------------编程问答-------------------- 品尝中 --------------------编程问答-------------------- 可惜我没分了,其他的部分请去博客看吧
http://blog.csdn.net/njjonathan/archive/2010/08/04/5787122.aspx
补充:企业软件 ,  地理信息系统
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,