三、Ribbon 功能区 要实现一个Ribbon功能区,分2部分逐一说明: 1. 自定义RibbonXml的编写 2. 自定义RibbonClass类的编写 先说第一部分,RibbonXml的编写,看下图: 1. LoadImage回调,用于Ribbon区图片显示的回调,会在Ribbon类中重写; 2. button按钮中的Image标签,用于指定按钮的图片名称,不带后缀名; 3. OnAction回调,用于button按钮的点击回调; 这里主要说明一下架构方式,本例使用的是通过添加资源来实现,xml代码脱离类代码文件,好处一目了然,可以动态替换,并且编辑XML可以智能提示,做法也很简单,先新建一个RibbonResources的文件夹,将图片资源放进去了,然后再添加一个xml文件(可以新键,或导入已编辑好的xml均可);然后在项目中再添加一个资源文件,将刚刚资源文件夹内的图片资源和xml文件作为资源添加即可。完成了这些步骤,写Ribbon类时就会方便很多。 再说第二部分,RibbonClass类的编写,如下图: 1. 对于Ribbon类的编写和函数以及加载项不同,标注是[ComVisible(true)],也就是Com可见,同时继承: ExcelRibbon类 2. 第一个重写的函数GetCustomUI,用于获取第一部分资源文件中的RibbonXML内容 3. 第二个重写的函数LoadImage,用于获取第一部分资源文件中的图片内容 4. OnAction回调,这个不用多说,就是按钮点击后的执行的程序,一般我们的逻辑都在这个回调中完成。 至此一个Ribbon功能区大体就完成了,也许有人获取会问,为啥搞这么复杂,直接将xml代码都写Ribbon类里不就得了?举个例子:目前Ribbon区只有一个按钮Start,如果需要新增一个按钮Stop得话,使用这样的架构就非常得容易了,基本无须改变Ribbon类的代码,只需在Xml中指定即可,目的就是做到代码与Xml,图片这些资源分离,降低耦合,各做各的事,Ribbon类负责逻辑,Xml负责UI,简单演示如下: 好了,先写到这吧,根据2楼的经验,这次就不贴代码了,太麻烦了,上面的两部分图片在截图时考虑到不贴代码均截取完整,有兴趣的可以参考一下,至于窗体和任务窗格,其实到了这一步后就简单了,无非是新增窗体或窗格后,通过回调调用而已,还有一些比如Addin类的作用,如何嵌入第三方dll等一些小细节,看情况再说吧。。。 |
|