• 在上一篇文章中,我们介绍了如何利用Windows Scenic Ribbon API为一个普通的Windows应用程序添加Ribbon界面。其中,我们只是简单地添加了一个Ribbon面板和一个按钮控件,还没有实现任何的具体 功能。这就像我们创建了一个Ribbon容器,等着我们将各种Ribbon控件装进去并对控件的各种消息进行处理,以实现相应的业务逻辑。

      在这一篇文章中,我们就来介绍如何向Ribbon面板添加各种Ribbon控件并实现控件的合理排布。

       微软在自己大量用户体验研究的基础上,同时积极汲取用户对第一代Ribbon界面的反馈,在第二代Scenic Ribbon界面中,提供了更加丰富的Ribbon控件,使得Ribbon界面的控件更加丰富。通过这些Ribbon控件的灵活组合应用,能够应对各种应 用程序对Ribbon界面控件的需要。下面我们就来介绍一下如何为Ribbon界面添加各种Ribbon控件并对这些控件进行排列布局。

      

      添加Ribbon界面添加应用程序菜单

       除了Ribbon面板,Ribbon界面的最大革新之处就是它的应用程序菜单。在Ribbon界面中,我们可以在Ribbon面板上布置一些常用的命令 功能,而对于一些不太常用的功能,比如文件打开关闭,系统设置等等,都可以在应用程序菜单中进行。Ribbon界面中应用程序菜单的定义非常简单,跟添加 按钮控件相似,我们需要先在XML文件的命令部分添加菜单中需要的各个菜单项:

    <!—应用程序菜单项-->
        
    <Command Name="FileMenu"
                 Symbol
    ="cmdFileMenu"
                 Id
    ="25000" />
        
    <!—为最长使用文档列表定义控件 -->
        
    <Command Name="cmdMRUList"
                 Symbol
    ="cmdMRUList"
                 Id
    ="25050"/>
        
    <Command Name="cmdMRUItems"
                 Symbol
    ="cmdMRUItems"
                 Id
    ="25051"/>
        
    <Command Name="cmdNew"
                 Symbol
    ="cmdNew"
                 Comment
    ="New"
                 Id
    ="25001"
                 LabelTitle
    ="New">
            
    <Command.LargeImages>
              
    <Image Source="NewL.bmp"/>
            
    </Command.LargeImages>
        
    </Command>
        
    <Command Name="cmdOpen"
                 Symbol
    ="cmdOpen"
                 Comment
    ="Open"
                 Id
    ="25002"
                 LabelTitle
    ="Open"/>
        
    <Command Name="cmdSave"
                 Symbol
    ="cmdSave"
                 Comment
    ="Save"
                 Id
    ="25003"
                 LabelTitle
    ="Save"
                 TooltipTitle
    ="Save tooltip title"
                 TooltipDescription
    ="Save tooltip description."/>
        
    <Command Name="cmdPrint"
                 Symbol
    ="cmdPrint"
                 Comment
    ="Print"
                 Id
    ="25004"
                 LabelTitle
    ="Print" />
        
    <Command Name="cmdExit"
                 Symbol
    ="cmdExit"
                 Comment
    ="Exit"
                 Id
    ="25005"
                 LabelTitle
    ="Exit" />


  • 书接上回,在前面一篇文章中,我们结合Office Word 2007,以实例的形式介绍了如何在Visual Sutton  2010中进行文档级自定义项的开发,相信大家在其基础上都可以开发出自己的丰富多彩的Office应用。前面介绍的文档级自定义项是跟某个具体的文档相 关联的,如果我们需要Office程序具有某些扩展功能,那该怎么办呢?能不能开发跟文档无关,而针对Office程序适用的插件,帮助我们完成一些繁琐 的辅助工作?答案当然是肯定的。在这篇文章中,我们继续在Visual Studio 2010中进行Office开发的话题,介绍如何开发跟文档无关的应用程序级插件。

      在上一篇文章中我们已经介绍过,在Visual Studio 2010中,Office开发主要有三种类型,其中应用程序级插件就是本文将要介绍的主要内容。应用程序级插件包含一个与某个 Microsoft Office 应用程序相关联的程序集。通常,该插件随着所关联的应用程序的启动而运行。当然,用户也可以在关联应用程序已经在运行的时候动态地加载插件。我们所创建的 应用程序级插件中的功能可用于应用程序本身,而与所打开的文档无关。

      第一篇:详解VSTS与OFFICE的协同开发:WORD篇

      在本文中,我们以最常用的Outlook收发邮件为例,介绍应用程序级插件的开发流程。我们可以设想这样这个Office应用场景:我们是工作在一个比较 规范的组织中,我们在利于Outlook发送新邮件时,通常会有一些固定的格式,例如给主题加上标头,邮件正文末尾添加固定的联系方式等等。另外,对于某 些管理者,常常会收到一些固定格式的报表,例如每周销售报表等等。这些报表需要专门整理保持到特定的目录以备查看。

      为了系统安全,甚至可以自动运行杀毒软件进行扫描。这些都是我们在使用Outlook时的常见任务,虽然这些任务都可以通过Outlook的设置来实现,但是这里我们还是利于开发的方式,来看看如果利于应用程序级插件,更加灵活高效地完成这些功能。

      Outlook对象模型概述

      在利用Visual Studio 2010开发应用程序级插件之前,我们还是先来了解一下即将用到的Outlook对象模型。Outlook对象模型提供许多我们可以与之进行交互的类。若要有效地使用Outlook对象模型,我们应该熟悉以下这些最常用类:

      •Application 类
      Application 类表示 Outlook 应用程序,它是 Outlook 对象模型中最顶层的类。此类的一些最重要的成员包括:
      CreateItem 方法,该方法可用来创建新项,例如电子邮件、任务或约会等。
      Explorers 属性,该属性可用来访问在 Outlook 用户界面 (UI) 中显示文件夹内容的窗口。
      Inspectors 属性,该属性可用来访问显示单个项(如电子邮件或会议要求)内容的窗口。
      在我们所创建的应用程序级插件项目中,若要获得 Application 类的实例,可以使用 自动生成的ThisAddin 类的 Application 属性,这个属性就代表了Application类的一个实例。

    【内容导航】

  • 在前面的系列文章中,我们曾经介绍过Visual Studio 2010中C# 4.0新的语言特性对Office开发的帮助。实际上,除了新的语言特性对Office开发的增强外,Visual Studio 2010在IDE本身,在开发体验方面,都对Office开发做了很多改进和增强。在接下来的几篇文章中,我们将以实例的形式,介绍如何利用Visual Studio 2010进行Office开发。

      在Visual Studio 2010中,微软提供了专门的Office开发套件VSTO来支持Office的开发。利用VSTO,我们可以开发下面几种类型的Office应用:

      •文档级自定义项
      文档级自定义项由与单一文档关联的程序集、工作簿或 Microsoft Office Word 或 Microsoft Office Excel 中的模板组成。在打开关联的文档时,程序集将自动加载。你所创建的自定义项中的功能仅在关联的文档被打开时可用。自定义项不能进行应用程序范围的更改,例 如打开任何文档时都显示一个新菜单项或功能区选项卡。

      •应用程序级插件
      应用程序级插件包含一个与某个 Microsoft Office 应用程序相关联的程序集。通常,该插件随着所关联的应用程序的启动而运行。当然,用户也可以在关联应用程序已在运行时加载插件。你所创建的插件程序中的功能可用于应用程序本身,而与所打开的文档无关。

      在Visual Studio 2010中,我们可以使用相应的模板创建Office应用程序的插件。通常,应用程序插件项目包含一个表示插件的自动生成的类。此类提供的属性和事件可用 于访问宿主应用程序的对象模型以及在加载和关闭插件程序时运行代码。许多 Visual Studio的通用功能在应用程序级插件项目中都是可用的,如 Windows 窗体和集成调试器等。

      •Office Ribbon界面插件
      跟应用程序级插件相类似,Office Ribbon界面插件不仅可以执行普通插件的功能,同时它还可以在Office应用程序的Ribbon面板上添加相应的控件,从而与用户进行交互,实现用 户的输入或者应用程序的输出。在Ribbon界面插件中,你可以自定义Office程序的Ribbon界面,通过功能区以控件的形式组织相关的命令。界面 插件通过在Office程序的“Add-ons”Ribbon页面中添加相应的控件,使它们易于查找,从而与用户进行界面交互,实现相应的功能。在早期版 本的Microsoft Office中使用菜单和工具栏访问的大部分功能,现在都可以使用Ribbon功能区访问。

     
    图1 Office开发的三种基本类型

      下面我们分别以实例的形式,来分别演示Visual Studio 2010中这三种Office应用的开发方式。

    【内容导航】

    第1页: 几种类型的Office应用 第2页: Word对象模型概述
    第3页: Range对象 第4页: 在设计器中编辑文档
    第5页: 创建并实现填写窗体 第6页: 自定义Word启动过程
  • 在上回中,我们简单地介绍了开发Ribbon界面的一般流程,同时演示了如何创建包含命令按钮(CMFCRibbonButton)的简单Ribbon界面,相信很多朋友都跃跃欲试,想为自己的软件创 建专业的Ribbon界面。但是,仅仅使用命令按钮是远远不能满足软件界面的交互需求的,同时也没有完全发挥Ribbon界面的强大威力。为了支持 Ribbon界面,Visual Studio 2010为我们提供了很多控件,除了我们上回介绍的命令按钮(CMFCRibbonButton)之外,还有工具廊 (CMFCRibbonGallery),颜色按钮(CMFCRibbonColorButton),编辑框(CMFCRibbonEdit),进度条 (CMFCRibbonProgressBar)等等。合理地使用这些控件,我们可以创建丰富的Ribbon界面,增强软件的可用性。在这回中,我们就介 绍一下如何使用这些控件,创建更加复杂的Ribbon界面,完成更加复杂的交互任务。  为了更好地理解和创建Ribbon界面,在开始具体地介绍各种控件之前,我们先来了解一下Ribbon界面的结构层次。在上一回中,我们介绍了Ribbon界面主要由Ribbon面板(CMFCRibbonBar)构成,而Ribbon面板主要的主要分为三个层次:

    Visual C++ 2010创建Ribbon界面(下)

  • 随着Office 2007的发布,它改变了以往传统的下拉式菜单用户界面,取而代之的是全新的被称之为“Ribbon”的固定式工具栏界面。微软声称这种新的用户界面能够使用户更容易地使用软件的各项常用功能,例如Word 2007中的保存,设置格式,插入图片等常用功能,都可以从Ribbon界面快速地访问到,从而提高用户的生产效率。

    虽然很多用户还在抱怨“不习惯Ribbon界面”、“很多功能找不到位置”等等,但是,随着微软的“强制”推行,Ribbon界面也在越来越被人们所接受,很多应用软件也开始采用Ribbon界面。更重要的是,在即将到来的Windows 7中,操作系统本 身更是大量地应用了Ribbon界面。不管我们愿意或者不愿意,Ribbon界面开始大张旗鼓地攻占我们的软件界面,成为继下拉式菜单后新的标准用户界 面。作为用户,我们需要逐渐熟悉这种新的软件用户界面;而作为开发者,更是需要了解和认识这种新的软件用户界面,新的交互方式,从而利于这种新界面的优 势,为用户提供更加优秀的软件。
    “Ribbon来了!”

      Windows平台的进化,往往都伴随着系统图形界面的重新设计。从Windows XP到Windows Vista,最大的革新就是Windows Aero的引入。而在微软的下一代Windows平台Windows 7中,虽然Aero被保留下来,但是Windows 7的图形用户界面更多的是朝着Office 2007相同的方向前进,无论是系统自带的工具软件,例如画图、写字板等,还是上层的第三方应用软件,例如Office 2007、AutoCAD、SnagIt等等,都全面应用了Ribbon界面。

    Visual C++ 2010创建Ribbon界面(上)