Micaps3.2二次开发实例教程-6
来源:互联网 发布:java gbk编码转utf 8 编辑:程序博客网 时间:2024/06/06 04:53
第六节 HelloWorld讲解
看完上一节,大家应该已经能够做出一个最简单的插件了,但是原理可能还不是很清楚,这一节将对HelloWorld进行详细讲解。HelloWorld的编写虽然有多个步骤,但大部分都是.Net开发的基本知识,熟悉.Net开发的人不会有问题。关键是两个地方需要讲解:
1、插件描述文件(HelloWorld.Addin):
Micaps使用Addin文件对插件的参数进行定义,如果是要给Micaps菜单添加菜单项,那么首先要在参数里指定菜单添加位置和菜单名,其次要指定一个类来响应该菜单项单击后的动作。
插件描述文件前面讲SharpDevelop时已经提过,主程序在启动后会读取它,将它加入插件树中,然后根据插件树的扩展点创建不同部件,实现不同功能。
HellowWorld.Addin中,各部分含义如下:
Name: 插件名称
Author: 作者
url: 超链接
description: 插件描述信息
以上对插件做了描述性表述,内容可根据情况填写,填写可以随意。
=======================================================
<Runtime>
<Importassemble = “HellWorld.dll”/>
<Runtime>
该段定义插件的dll文件名,如果Addin与dll在同一路径,dll可省略路径名。
=======================================================
<Path name = "/Workspace/MainMenu/View">
<MenuItem id ="HelloWorldCommand"
label = "Hello World"
class = "HelloWorld.HelloWorldCommand"/>
</Path>
Path name: 表示你的插件所要插入的扩展点,它决定着你的插件要扩展的功能(Micaps内部已经定义了如主菜单、主工具条、浮动窗口、视图等节点,一般情况下,我们只需要根据需要添加的功能将插件的PahtName设为适当值)。如:Path name = "/Workspace/MainMenu/View"表示给Micaps的主菜单增加内容。常用扩展点如下(Copy自Micaps二次开发手册):
扩展点路径
元素
属性
备注
示例
/Workspace/DisplayBindings
DisplayBinding
1、id:标识binding
2、class:
IDisplayBinding
或ILayerDisplayBinding接口的实现类
3、type[可选]:如果class是从layerdiplaybinding,则需要type属性等于”Layer”
这里class的名称要使用全名称即
namespace+classname
<Path name = “Workspace/DisplayBinding>
<DisplayBinding id=”diamond14” class=”Diamond14.Diamond14FileDisplayBinding” type=”Layer” />
</Path>
/Workspace/MainMenu
MenuItem
1、id:菜单id
2、label:菜单文字
3、type:菜单类型
4、icon:菜单图标
5、shortcut:快捷键
6、class:点击菜单要执行的命令
7、param[可选]:执行菜单时,传递给命令接口execute方法的参数。
type类型可以为
command:普通的按钮菜单
separate:菜单分割条
menu:当前菜单是父级菜单
<MenuItem id=File
label=”文件” type=”menu”>
<MenuItem id=”new” type=”command”
lable=”新建” class=”Micaps.NewFileCommand”/>
</MenuItem>
/Workspace/ToolWindows
ToolWindow
1、id:windowid
2、class:继承自IToolWindow的实现类。
3、icon[可选]:图标
4、title:窗口标题
5、defaultposition[可选]:默认位置
6、category:是否在主系统的视图菜单中添加显示该窗口的菜单项
或者继承abstract
defaultposition:是
top、buttom、left,right,如果默认不显示,则用逗号隔开用hidden.
category属性:有些工具窗口默认是不显示。一般都需要在菜单中增加一个显示窗口的菜单。可以把这个属性设置为“Main“
<ToolWindow id=”Diamond14PropertyWindow”
class=”Diamond14PropertyWindow” title=”14类属性”
defaultposition=”Left,Hidden” category=”Main”/>
/Workspace/Toolbar
ToolbarItem
同菜单
toolbaritem元素的属性和菜单基本一样,只是type中多一些类型,工具栏类型可以是Separator、
Checkbox、
ComboBox、
DropDownButton、
SplitButton
<ToolbarItem id=”SaveImage” label=”保存图片”
class=”Micaps.SaveImageCommand” shortcut=”Ctrl+S”/>
工具栏如果指定了图片,则不显示文字了
/Workspace/Autoload
Class
id:命令id
class:继承自ICommand接口的实现类
<Class id=”showmainview”
class=”Micaps.ShowMainViewCommand”/>
/Workspace/Toolbox
TooboxItem
id:交互工具id
class:点击交互工具要执行的命令
label: 交互工具名称
icon:图标
hasproperty:是否具有属性
<ToolboxItem id=”yijifeng” lable=”一级风”
icon=”BitMaps.Yijifeng” hasproperty=”false”
class=”Diamond14.DrawSymbolCommand”/>
/Workspace/MainView /AutoloadLayers
Class
id:节点标识
class:继承自Layer类的实现
<Class id=”interactivelayer”
class =”Diamond14.InteractiveLayer”/>
不同扩展点,其子节点的内容各不相同,如HelloWorld挂接在主菜单节点下,因此它的子节点应为MenuItem,对于MenuItem,它必须要有两个属性,一个是Lable,即菜单项的标题,另一个是要执行这个菜单命令的类class,它是你的插件代码中的一个类名称,并且这个必须继承AbstractMenuCommand。
Micaps本身的主菜单、主工具条、浮动窗口等都是以这种方式添加进来的,也就是说Micaps开发人员也是用这种方式给Micaps添加各个窗口部件,所以,我们可以在Micaps/Addin目录及其子目录下找到大量Addin文件,这些文件可以作为编写新插件很好的参考。
2、代码
前面我们说了,Addin文件中设定一个按钮执行类HelloWorld.HelloWorldCommand,所以代码中必须对它进行实现,该类必须继承抽象类AbstractMenuCommand。在Sharpdevelop源码中查看AbstractMenuCommand定义如下:
public abstract class AbstractMenuCommand : AbstractCommand, ICommand, IMenuCommand{ protected AbstractMenuCommand(); public virtual bool IsEnabled { get; set; } public override bool CanExecute(object arg);}
它由AbstractCommand继承,并实现了ICommand, IMenuCommand接口。再看AbstractCommand,定义如下:
public abstract class AbstractCommand : ICommand { protected AbstractCommand(); public virtual object Owner { get; set; } public event EventHandler OwnerChanged; public abstract bool CanExecute(object arg); public abstract void Execute(object arg); protected virtual void OnOwnerChanged(EventArgs e);}
先不管这么多,只需要知道其中抽象函数Execute(object arg)未被实现,这个就是等你实现的菜单项单击后要执行的函数。
于是,代码就出来了:
/// HelloWorld菜单命令类 /// </summary> public class HelloWorldCommand : AbstractMenuCommand { /// <summary> /// 点击HelloWorld菜单后被调用 /// </summary> /// <param name="arg"></param> public override void Execute(object arg) { MessageBox.Show("Hello World 欢迎使用Micaps3.2二次开发教程!"); } }
实际上就一行代码,用来验证代码是否生效。
总结一下,要给Micaps增加菜单项,首先在Addin文件中,标明扩展点路径为/Workspace/MainMenu(主菜单扩展点)、菜单的名称、执行该菜单的类名等,然后在代码实现Addin中设定的类,该类要继承AbstractMenuCommand,实现抽象方法Execute,在该方法中编写单击按钮所要执行的代码,运行Micaps后即可生效。
3、插件的发布
编写完插件,给其Micaps用户用,很简单:将你编译好的dll和Addin文件,拷入一个文件夹,别人要用,将此文件夹拷入Micaps3.2的Addins目录下,然后修改此目录下的Micaps.Config文件,将拷入的Addin文件名加进去,重写运行Micaps,插件即可生效。
本节仅针对HelloWorld实例进行了讲解,要了解SharpDevelop插件是如何组织、加载、运行的原理,需认真阅读SharpDevelop文档和源码。
- Micaps3.2二次开发实例教程-6
- Micaps3.2二次开发实例教程-2
- Micaps3.2二次开发实例教程-1
- Micaps3.2二次开发实例教程-3
- Micaps3.2二次开发实例教程-4
- Micaps3.2二次开发实例教程-5
- Micaps3.2二次开发实例教程-7
- Micaps3.2二次开发实例教程-8
- Micaps3.2二次开发实例教程-9
- Micaps3.2二次开发实例教程-10
- Micaps3.2二次开发实例教程-11
- Micaps3.2二次开发实例教程-12
- Micaps3.2二次开发实例教程-13
- Micaps3.2二次开发实例教程-14
- [Net_Ghost] WPF实例教程(6)
- Smarty实例教程(6)
- [Net_Ghost] WPF实例教程(2)
- Smarty实例教程(2)
- 解释nginx的epoll的网络I/O模型为什么快的原因
- 字符串面试题系列之三:左旋转字符串
- Android之扫描二维码&开启闪光灯
- 《我的第一本c++书》学习笔记:STL中的一些通用算法(一)
- jquery学习(一)
- Micaps3.2二次开发实例教程-6
- 打印Java环境参数
- GNU bash实现机制与源代码简析
- 计划指南
- HMM学习笔记_1(从一个实例中学习DTW算法)
- Erlang ODBC 处理中文
- LeetCode —— Anagrams
- SVN命令总结
- 用c++编写一个不能被继承的类(但是可以在类外部定义该类的对象)