连载-基于插件技术的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
补充:企业软件 , 地理信息系统