湖南大学生网

功能区选项卡和控件扩展2007OfficeSystem

2010-12-23 11:25| 发布者: 伽奇·胡| 查看: 55| 评论: 0

  本文讨论:

  功能区简介

  RibbonX 控件和功能

  升级加载项以使用 RibbonX

  为 Word 和 Excel 构建加载项

  本文使用了以下技术:2007 Microsoft Office 系统

  目录

  对现有加载项的支持

  RibbonX 中的新功能StartFromScratch 模式命令禁用和重用按需加载将 Word 模板升级到 RibbonX添加 XML 和图像Excel 的 COM 加载项实现回调函数使 getVisible 回调值无效其他回调总结

  如果您曾见过 2007 Microsoft Office 系统,那么您会发现新的 Microsoft® Office 用户界面与以前的 Office 版本有着本质的区别。因此,当您了解到 UI 背后的可扩展性模型也为全新时,应该也不会感到吃惊了。

  与其扩展的旧工具栏和菜单非常类似,CommandBars 对象模型(从 Office 97 开始提供)难以有效地使用。新模型被称为 RibbonX,它具有许多与新 UI 本身相同的属性:易于使用、一致性、时尚性和可预见性(对最终用户而言)。

  通过使用 XML 来指定 UI 的内容和结构并在其背后使用动态回调机制,RibbonX 将 UI 设计从其背后的代码中解脱出来。稍后我将在本文中说明所有相关细节,但在这之前,我会先介绍经验丰富的 Office 开发人员可能感兴趣的一些有关新 UI 的内容。

  在抛弃旧 UI 的同时,Microsoft 也舍弃了许多熟悉的术语并使用陌生的新概念来代替它们。我们先来看看新 UI 的基础知识,确保所有人都能对它有基本了解。 Microsoft Office Word 2007 上标出了每个主要 UI 组件。

  1. 功能区 文档上方的大矩形区域即是功能区。它包含标题栏、Office 按钮、快速访问工具栏及选项卡。RibbonX 主要应用于功能区及其内部的每一项。

  2. Office 按钮 此按钮会显示 Office 菜单,该菜单与 Office 先前版本中的“文件”菜单大致相同。Office 菜单包含多个命令,这些命令是对文档进行操作,而不是对文档的内容进行操作。使用 RibbonX 加载项可以随意改变 Office 菜单的内容(但是它们不能自定义 Office 按钮本身)。

  3. 快速访问工具栏 此工具栏包含常用的命令,而且是最终用户进行自定义的主要位置。用户可以右键单击任何功能区控件并将其添加到快速访问工具栏(包括自定义 RibbonX 控件)。因为它的设计目的便是作为一块“属于”最终用户的空间,所以通常不允许 RibbonX 加载项改变快速访问工具栏,除非它们已经启用 StartFromScratch 模式。

  4. 选项卡 选项卡是构成功能区的主要内容,而且包含用于处理文档内容的 UI 控件。RibbonX 加载项可以创建它们自己的自定义选项卡,并改变内置选项卡的可见性和标签。

  5. 上下文选项卡集 选中文档内部的对象(例如图片或表)时,即会出现上下文选项卡集,其中包含所有用于处理这些对象的 UI 元素。RibbonX 加载项可以改变内置选项卡集的可见性,并向其添加自定义选项卡。2007 Office 版本不支持创建自定义上下文选项卡集。选项卡集包含上下文选项卡,它们的作用方式与常规选项卡相同。

  6. 组 选项卡包含组的集合,组中则包含各个 UI 控件。RibbonX 加载项可以改变内置组的可见性,并创建它们自己的自定义组。但它们不能改变内置组的内容。此限制可以保护 UI 布局并防止加载项之间相互冲突以及加载项与 Office 的将来版本发生冲突。根据选择,组的角落处可拥有对话框启动器,用于显示与组相关的对话框(例如“字体”或“段落”对话框)。

  7. 任务窗格 2007 Office 系统中仍存在若干任务窗格,而且现在支持同时打开多个任务窗格。COM 加载项现在可以创建托管 ActiveX® 控件或 Windows® 窗体控件等内容的 CustomTaskPane。(CustomTaskPane 功能与 RibbonX 不同,但本文不会对此进行介绍。)

  8. MiniToolbar MiniToolbar 是选定文本和右键单击上下文菜单时出现的常见格式命令集合。RibbonX 加载项不能修改 MiniToolbar 的内容,但它们可以禁用或重用其内置命令。

  9. 上下文菜单 这些上下文菜单与 Office 先前版本中我们熟悉和喜爱的那些上下文菜单相同。在 2007 Office 版本中,RibbonX 不应用于上下文菜单,但使用 CommandBars 对象模型可以像过去那样扩展和自定义它们。

  10. 状态栏 状态栏包含几个方便的新控件,如字数统计和视图滑块。尽管状态栏可以隐藏,但在 2007 Office 系统中加载项不可以自定义状态栏。

  对现有加载项的支持

  如果您已针对 Office 2003 编写了加载项,您可能想知道它们在 2007 版本中是否仍起作用。很高兴,答案是肯定的,它们仍可以很好地运行(除非它们做些不可思议的事情,如检查 Office 版本并拒绝在新版本上运行)。所有的旧菜单和工具栏仍存在于表面之下,原因很简单,因为操控它们的旧式加载项仍需要在 2007 Office 系统上运行。它们在新 UI 中如何显示?让我们看一个示例。

  显示了一个假定的 Word 2003 加载项(该加载项创建一个自定义工具栏并将几个按钮添加到旧菜单和工具栏)以及在 Word 2007 中进行加载时该加载项的外观。

  如您所见,当加载旧式 CommandBar 加载项时,“加载项”选项卡显示在功能区内。“加载项”选项卡包含三个组:“菜单命令”、“工具栏命令”和“自定义工具栏”。“菜单命令”和“工具栏命令”组分别包含添加到旧式内置菜单和工具栏中的自定义控件。它们还显示由加载项重用以执行自定义操作(通过设置 OnAction 或 Hyperlink 属性)的任何旧式内置控件。“自定义工具栏”组将任何旧式自定义工具栏显示为水平区域。控件的工具提示会显示控件所在的旧式工具栏的名称。

  如果在卸载后某个行为异常的加载项留在了按钮背后,用户可以右键单击“加载项”选项卡中的控件,然后将它们从旧式 CommandBar 结构中删除。

  RibbonX 中的新功能

  RibbonX 使 Office 编程进入基于 XML 的 UI 声明的现代化时代。您现在可以在结构化标记窗体中创建指定 UI 外观的 XML 文件,而不再需要使用一系列对象模型调用来编写构建 UI 的复杂代码。这对于加载项编写者而言有许多好处。

  首先,您可以将 UI 与代码分离。UI 设计者不需要为了尝试新设计而知道手动更新代码的方法。事实上,如果加载项选择从外部文件加载其 XML,那么甚至可以不必重新编译该加载项即可修改和完善 UI。这便消除了硬编码 UI 系统所需的反复“编辑”、“编译”、“运行”循环的中间步骤。

  其次,Office 能分辨加载项的完整 UI。这一点看上去似乎并不重要。但是,如果您知道使用 CommandBars 时,Office 的先前版本不知道哪些工具栏和菜单属于哪个加载项,而且所有的 UI 修改都通过 COM 调用来实现,而这些调用不可追溯回到任何个别加载项,那么您就能明白它的重要性。Office 之前版本的这个特点会导致一些烦人的问题,而现在这些问题完全可以避免。

  第三,Office 可以自动清理加载项的 UI。以前,加载项必须使用特殊代码在关闭或卸载时检查其菜单和工具栏并将它们删除。如果加载项崩溃或不能正确地进行自身清理(此情况曾多次发生),它会将无用的按钮留在 UI 中。由于 2007 Office 系统可以自动清理加载项 UI,因此不必写入任何清理代码,也不会有残留的 UI。

  不同 Office 版本之间的差别是您需避免的另一个问题。有效的 XML 文件需要包含 xmlns 命名空间声明,用于标识文件所遵循的架构版本。这样,RibbonX 便能得知特定加载项所针对的 Office 版本,并能在版本之间有差异时正确映射 UI。CommandBars 对象模型缺少版本控制和所有权是造成以下情况的两个主要原因:更新到新版本 Office 时旧式加载项常常遭到破坏;“加载项”选项卡无法很好地区分由 OM 调用添加到其中的杂乱控件。

  最后,XML 具有良好的工具支持。只需通过拖放,便能利用所提供的 RibbonX 架构定义文件 (XSD)、各种 XML 编辑器(包括 Word 2007 本身)创建有效的 RibbonX UI 文件。

  CommandBars 对象模型可视为使用“推”模型,其中加载项会通过设置对象模型中的各种属性将所有 UI 数据推入 Office。UI 中控件的每个属性必须在启动时由加载项明确设置,即使此控件所在的菜单或工具栏从未显示。如果这涉及加载大量图像文件,则会对性能造成极大影响。

  RibbonX 使用“拉”模型,其中 Office 仅在需要时将数据从加载项中拉出。加载项提供 get 回调,例如 getLabel 或 getImage,而不再设置像 CommandBar.Name 或 CommandBarButton.Picture 之类的属性。需要知道某个控件的标签或图像时,Office 便会调用这些回调。

  拉模型的主要优点在于性能优势。在 2007 Office 版本中,应用程序启动时可能大多数加载项的 UI 都不可见,尤其是当加载项在“加载项”选项卡中添加了自己的顶级选项卡或组时。因此没有必要立即加载这些控件的所有图像,否则会导致性能急剧下降。仅需在用户单击该选项卡时加载图像。RibbonX 会尽可能延迟回调的调用,以分摊整个会话中的资源加载成本,并在即便安装了若干加载项的情况下保持 Office 应用程序快速启动。

  如果 Office 确定调用这些回调的时间,您可能想知道如何动态更改控件属性。RibbonX 缓存回调的返回值,并且在加载项使这些返回值无效之前不会进行回调。加载项可以通过 IRibbonUI 接口的 Invalidate 和 InvalidateControl 方法来实现此目的。一旦控件的属性失效,RibbonX 即会知道在下次需要时进行回调。如果此控件当前显示在屏幕上,它将立即回调并更新值。如果它没有显示在屏幕上,则 RibbonX 会等到它出现在屏幕上时才进行回调。下面我们将深入探讨实现回调功能的所有细节,并在文中的示例加载项中详细介绍如何进行失效。

  RibbonX 提供许多不同的控件类型以用于扩展,包括这些控件类型。CommandBars 只能使用此列表中的前六项,但现在有许多新 UI 选项可供 RibbonX 加载项使用。其中,最引人注目的新控件类型应是包括按钮和下拉菜单的 splitButton以及展开以显示图像选择的库。两者均广泛应用于 2007 Office 版本中,目的是减少 UI 混乱并方便预览可见操作。我们也鼓励加载项编写者使用这些新控件类型来为自己的 UI 提供相同的效果。

  Figure3RibbonX 控件

  RibbonX 控件

  1. 按钮

  2. toggleButton

  3. editBox

  4. 菜单

  5. comboBox

  6. dropDown

  7. dialogBoxLauncher

  8. 库

  9. splitButton

  10. 标签

  11. checkBox

  12. 组

  13. 选项卡

  14. superTip

  StartFromScratch 模式

  许多开发人员使用 Office 作为平台来构建自己的自我包含应用程序。运行时,这些应用程序通常会删除所有的内置 Office UI 并使用自己的 UI 进行替换。因为不存在使用 CommandBars 执行此操作的标准机制,因此实施过程中总是充满了困难和错误。

最新评论

验证问答 换一个 验证码 换一个

大学生要找工作,就上湖南大学生人才网..
长沙理工大学自考在线报名咨询!

关于我们|商务合作|广告投放|手机访问|无图访问|联系我们|湖南大学生网 ( 湘ICP备10000310号 )


拒绝任何人以任何形式在本站发表与中华人民共和国法律相抵触的言论!

本站部份内容来源网络和网友发布,供大家交流学习参考之用, 版权归版权原作者所有,如无意中侵犯了您的利益请联系我们尽快处理。

Powered by 5+7WorkRoom System by Discuz!X2

© 2008-2011 XunNets.com

回顶部