问题描述
[align=center]基于插件技术的GIS应用框架(C#+ArcEngine9.3)(三)-------------------------插件的分类[/align]我们在进行GIS框架的开发时,有个问题必须先得明确下来,这就是你的插件具体有哪些表现形式,这直接关系到你的框架接口的设计、插件的加载及保存。具体一点,就是说,你的界面上将会出现哪些UI元素,如何进行管理。例如:Combobox、Edit、MenuItem诸如此类的插件。看过一些文章,大都具有子菜单的菜单项和工具栏都当做插件来处理,在本文论及的框架中,没有此类插件,但却同样做到了统一加载,统一管理。一、命令插件IAxCommand接口定义:publicinterfaceIAxCommand:PluginEngine.Interface.IAxPlugin{}这个接口没有任何属性方法,实际上加载到本文框架中的命令插件和工具插件必须分别实现esriSystemUI.ICommand接口和esriSystemUI.ITool接口,这里声明IAxCommand接口只是为了方便插件池对象对所有命令和工具进行管理而已,后面会有所提及。二、工具插件IAxTool接口定义:publicinterfaceIAxTool:PluginEngine.Interface.IAxPlugin{IPointSnappedPoint{get;}//捕捉到的点}大家可以发现,这个接口只有一个属性,实际上,在本文框架中,为了改变ArcMap那种只有草图工具可以进行捕捉的尴尬,对于捕捉的环境、捕捉代理的代码全由自己实现,这样一来,对于想要进行捕捉的其他ITool接口实现类,只要同时实现IAxTool接口就能进行捕捉了。三、列表框插件IAxCombobox接口定义:///下拉列表插件接口publicinterfaceIAxCombobox:PluginEngine.Interface.IAxPlugin{///下拉列表的名称stringName{get;}///下拉列表的标题stringCaption{get;}///是否显示标题boolShowCaption{get;}///下拉列表的ItemsSystem.Collections.ICollectionItems{get;}///下拉列表的文字stringText{get;}///下拉列表的类别stringCategory{get;}///下拉列表是否可用boolEnabled{get;}///下拉列表是否可编辑boolEditable{get;}///下拉列表的宽度intWidth{get;}///下拉列表下拉的最大行数intDropDownRows{get;}///提示文字stringTooltip{get;}///出现在状态栏的消息文字stringMessage{get;}///KeyPress事件voidOnKeyPress();///KeyDown事件voidOnKeyDown();///EditValueChanged事件voidEditValueChanged(stringnewText);///列表创建时触发的方法///<paramname="hook">框架对象</param>voidOnCreate(IAxApplicationhook);}对于一个下拉列表类型的插件,我们只需要定义上面这些属性和方法、事件差不多就够了,后续章节中,我就针对编辑任务列表这个下拉列表插件做详细介绍。四、编辑框插件IAxEdit接口定义:publicinterfaceIAxEdit:PluginEngine.Interface.IAxPlugin{///编辑框的名称stringName{get;}///编辑框的标题stringCaption{get;}///是否显示标题boolShowCaption{get;}///编辑框的文字stringText{get;}///编辑框的类别stringCategory{get;}///编辑框是否可用boolEnabled{get;}///编辑框是否只读boolReadOnly{get;}///编辑框的宽度intWidth{get;}stringTooltip{get;}///状态栏消息stringMessage{get;}///KeyPress事件voidOnKeyPress();///KeyDown事件voidOnKeyDown();///编辑框创建时触发的方法///<paramname="hook">框架的对象</param>voidOnCreate(IAxApplicationhook);}定义这个插件接口,可以显示诸如地图比例尺信息等。五、菜单组插件IAxSubItem接口定义:publicinterfaceIAxSubItem:PluginEngine.Interface.IAxPlugin{///子菜单的文字stringCaption{get;}///子菜单所属的类别stringCategory{get;}///子菜单名称stringName{get;}///子菜单宽度intWidth{get;}///子菜单产生是触发的方法///<paramname="hook">框架对象</param>intVisible{get;}//-1-Never,0-OnlyInCustomizing,1-AlwaysvoidOnCreate(IAxApplicationhook);}IAxSubItem这个接口实际上是个容器接口,在最终加载这个插件的时候,寄宿于其之上的其他插件对象都通过XML配置文件有所记录。六、视图插件IAxContentsView接口定义:publicinterfaceIAxContentsView:PluginEngine.Interface.IAxPlugin{///位图intBitmap{get;}///句柄inthWnd{get;}///名称stringName{get;}///标题stringCaption{get;}///子控件System.Windows.Forms.ControlObjecthWnd{get;}///是否可见boolVisible{get;set;}///视图的页号intIndex{get;set;}///视图当前选择的对象objectSelectedItem{get;}///OnCreatevoidOnCreate(IAxApplicationhook);///RefreshvoidRefresh();}视图插件其实就类似于C#组件TabControl里的一个页对象,TOC视图就可以实现这个接口从而加载到框架里来。七、停靠窗体插件IAxDockableWindow接口定义///停靠窗体接口publicinterfaceIAxDockableWindowDef:PluginEngine.Interface.IAxPlugin{///标题stringCaption{get;}///停靠窗体对象句柄System.Windows.Forms.ControlObjecthWnd{get;}///名称stringName{get;}///默认停靠位置DevExpress.XtraBars.Docking.DockingStyleDefaultDock{get;}///构建方法///<paramname="hook"></param>voidOnCreate(IAxApplicationhook);///OnDestoryvoidOnDestory();}八、颜色编辑框插件IAxColorPicker接口定义:///颜色提取器插件接口publicinterfaceIAxColorPicker:PluginEngine.Interface.IAxPlugin{///位图intBitmap{get;}///颜色提取器的名称stringName{get;}///颜色提取器的标题stringCaption{get;}///是否显示标题boolShowCaption{get;}///颜色提取器的类别stringCategory{get;}///颜色提取器是否可用boolEnabled{get;}///颜色提取器的宽度intWidth{get;}///提示文字stringTooltip{get;}///状态栏消息stringMessage{get;}///EditValueChanged事件voidEditValueChanged(stringnewText);///颜色提取器创建时触发的方法///<paramname="hook">框架对象</param>voidOnCreate(IAxApplicationhook);}
解决方案
解决方案二:
品尝中
解决方案三:
可惜我没分了,其他的部分请去博客看吧http://blog.csdn.net/njjonathan/archive/2010/08/04/5787122.aspx