分类: C/C++
2008-03-31 14:43:15
微软在06年底推出了两个重量级的产品:Vista和Office 2007。在Office2007中使用了新的UI方式。微软大力鼓吹这种叫做Ribbon的新的UI将会给使用Office的人带来更大的便利性。在Office插件方面,微软保持了对原有版本 (office 2K、XP、03) 的兼容性,都被放到一个叫做Add-In的Tab里面,如下图所示。
不过样子比较难看,到底有没有办法让界面做得更漂亮一点呢?答案是肯定的。本文假设读者已经阅读并理解了我的上一篇文章:
“用VC6.0编写Word插件(Office2K、XP、03)”
首先,引入新的Office的几个库文件,如果你的电脑安装了Office 2007,那么下面几个文件就会存在你的硬盘里面。
然后,原来的那个WordAddin需要继承一个名叫IRibbonExtensibility新的接口,并实现这个接口必须的函数raw_GetCustomUI。
然后,原来的那个WordAddin需要继承一个名叫IRibbonExtensibility新的接口,并实现这个接口必须的函数raw_GetCustomUI。
实现上边这个函数的目的是,因为Office2007在启动的时候就会询问插件的IRibbonExtensibility接口是否存在,如果该接口存在的话,就会调用这个接口的函数raw_GetCustomUI,在这个函数里面,我们必须把我们的UI通过XML的方式传给Office 2007,这样,在XML里面,我们可以自己定义我们需要的UI形式,样式非常丰富多彩,只有想不到,没有做不到。以下是一个简单的XML的例子:
我们可以把这个XML字符串放到我们的资源文件里面,并且在raw_GetCustomUI中传递给Office。以下是这个函数的简单实现。
到目前为止,在Word的UI上面我们应该可以看到我们的插件了。如下图所示。如果还不能看到的话,请检查前面的步骤是否有错误。
这时,当你点击按钮的时候,会发现没有任何反应。那么,该如何响应对应的按钮事件呢?这就需要我们修改两个地方。首先在XML字符串里面注明按钮的响应函数。
然后,在我们的组件里面新增这个接口函数。//新增的响应函数
一定要注意新增的这个接口函数必须与XML里面指定的相同。现在你再点击按钮的话,就会有一个对话框弹出来了。
总结
Office 2007系列的插件,跟以往的插件编写方法有了很大的不同。通过引入XML的UI安排方式,大大的增加了灵活性。本着与时俱进的精神,我们应该跟随微软的脚步,尽快掌握这个技术。