插件式设计开发心得(二)

接昨天,下面我们来开发各种类型的插件接口,这些接口中最重要的有两个接口ICommand和ITool接口。ICommand是所有命令型插件的基接口,所有命令性质的插件类都要继承、实现该接口。这个接口一般包含命令按钮的基本属性,如图标、是否可用、可见性、名字、显示文字、鼠标移动至该按钮上显示的文字等。具体代码如下:

Code:
  1. namespace WingOfDream.SystemTool.CoreFramework   
  2. {   
  3.     using System.Drawing;   
  4.     ///    
  5.     /// 所有插件工具的命令接口   
  6.     ///    
  7.     public interface ICommand : IPlugin   
  8.     {  
  9.         #region ICommand 成员   
  10.         ///    
  11.         /// 命令按钮图标   
  12.         ///    
  13.         Bitmap Bitmap { get; }   
  14.         ///    
  15.         /// 命令按钮是否被选择   
  16.         ///    
  17.         bool Checked { get; }   
  18.         ///    
  19.         /// 命令按钮是否可用   
  20.         ///    
  21.         bool Enabled { get; }   
  22.         ///    
  23.         /// 快捷帮助ID   
  24.         ///    
  25.         int HelpContextId { get; }   
  26.         ///    
  27.         /// 帮助文档路径   
  28.         ///    
  29.         string HelpFile { get; }   
  30.         ///    
  31.         /// 按钮名称   
  32.         ///    
  33.         string Name { get; }   
  34.         ///    
  35.         /// 按钮单击时触发的方法    
  36.         ///    
  37.         void OnClick();   
  38.         ///    
  39.         /// 按钮产生时触发的方法   
  40.         ///    
  41.         ///    
  42.         void OnCreate(IApplication hook);   
  43.         ///    
  44.         /// 鼠标移动到按钮上显示的文字   
  45.         ///    
  46.         string ToolTipText { get; }  
  47.  
  48.         #endregion   
  49.     }   
  50. }   

下面是ITool接口,该接口是所有工具按钮的基接口,同样的,所有工具类必须继承、实现该接口。具体代码如下:

Code:
  1. namespace WingOfDream.SystemTool.CoreFramework   
  2. {   
  3.     using System.Drawing;   
  4.     ///    
  5.     /// 所有工具插件的基接口(继承自IPlugin接口)   
  6.     ///    
  7.     public interface ITool : IPlugin   
  8.     {  
  9.         #region ITool 成员   
  10.         ///    
  11.         /// 工具按钮显示的图标   
  12.         ///    
  13.         Bitmap Bitmap { get; }   
  14.         ///    
  15.         /// 工具按钮是否被选择   
  16.         ///    
  17.         bool Checked { get; }   
  18.         ///    
  19.         /// 工具按钮是否可用   
  20.         ///    
  21.         bool Enabled { get; }   
  22.         ///    
  23.         /// 快捷帮助ID   
  24.         ///    
  25.         int HelpContextId { get; }   
  26.         ///    
  27.         /// 名称   
  28.         ///    
  29.         string Name { get; }   
  30.         ///    
  31.         /// 创建Tool按钮   
  32.         ///    
  33.         ///    
  34.         void OnCreate(IApplication hook);   
  35.         ///    
  36.         /// 单击Tool按钮时触发方法   
  37.         ///    
  38.         void OnClick();   
  39.         ///    
  40.         /// 双击Tool按钮时触发方法   
  41.         ///    
  42.         void OnDblClick();   
  43.         ///    
  44.         /// 鼠标移到Tool按钮上时显示文字   
  45.         ///    
  46.         string ToolTipText { get; }  
  47.         #endregion   
  48.     }   
  49. }  

当然一个工具类中不一定会单纯只有以上这些属性,如有需要,可以自行增删。

其中,接口中OnCreate(IApplication hook)方法为创建该插件实例时所需要的方法,我们知道,一个插件程序需要跟主窗体程序进行交互,那么我们就得先创建该插件的实例,然后通过OnClick()方法捕捉单击该命令或者工具所产生的事件,以此达到插件与主窗体程序进行交互的目的。

同时,可以看到,以上两个接口都是继承自IPlugin接口的,因为我们昨天定义了IPlugin(所有插件接口的基接口),其中包含两个属性,一个是程序或者插件类的名称,另一个是插件的类型。因为所有的插件类都有名称跟类型,所以,通过继承,就可以偷个懒,少写几行代码,嘿嘿。

好了,下面来写一个接口,IItemDef,这个接口表示所有命令项的基接口,代码如下:

Code:
  1. namespace WingOfDream.SystemTool.CoreFramework   
  2. {   
  3.     ///    
  4.     /// 一个命令项   
  5.     ///    
  6.     public interface IItemDef   
  7.     {   
  8.         ///    
  9.         /// 是否新组   
  10.         ///    
  11.         bool Group { getset; }   
  12.         ///    
  13.         /// Item的ID   
  14.         ///    
  15.         int ID { getset; }   
  16.         ///    
  17.         /// Item的子类Command或者Tool   
  18.         ///    
  19.         long SubType { getset; }       
  20.     }   
  21. }   

接着来实现这个接口,代码如下:

Code:
  1. namespace WingOfDream.SystemTool.CoreFramework   
  2. {   
  3.     ///    
  4.     /// 实现IItemDef(一个命令项)   
  5.     ///    
  6.     public class ItemDef : IItemDef   
  7.     {   
  8.         private bool _group;   
  9.         private int _id;   
  10.         private long _subType;  
  11.  
  12.         #region IItemDef Members   
  13.   
  14.         public bool Group   
  15.         {   
  16.             get  
  17.             {   
  18.                 return _group;   
  19.             }   
  20.             set  
  21.             {   
  22.                 _group = value;   
  23.             }   
  24.         }   
  25.   
  26.         public int ID   
  27.         {   
  28.             get  
  29.             {   
  30.                 return _id;   
  31.             }   
  32.             set  
  33.             {   
  34.                 _id = value;   
  35.             }   
  36.         }   
  37.   
  38.         public long SubType   
  39.         {   
  40.             get  
  41.             {   
  42.                 return _subType;   
  43.             }   
  44.             set  
  45.             {   
  46.                 _subType = value;   
  47.             }   
  48.         }  
  49.  
  50.         #endregion   
  51.     }   
  52. }  

接着么。。。。就明天继续啦,哈哈

你可能感兴趣的:(工具,command,hook,文档)