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文档和源码。


原创粉丝点击