使用扩展性接口自定义 UI 功能

更新:2007 年 11 月

适用对象

本主题中的信息仅适用于指定的 Visual Studio Tools for Office 项目和 Microsoft Office 版本。

项目类型

  • 应用程序级项目

Microsoft Office 版本

  • 2007 Microsoft Office system

有关更多信息,请参见按应用程序和项目类型提供的功能

Visual Studio Tools for Office 提供了一些类和设计器,当您使用它们在应用程序级外接程序中创建自定义任务窗格、功能区自定义项和 Outlook 窗体区域时,这些类和设计器可以处理许多实现详细信息。不过,如果您有特殊要求,也可以自己为每项功能实现扩展性接口。

扩展性接口概述

2007 Microsoft Office system 中的应用程序定义了一组扩展性接口,COM 外接程序可以通过实现这些接口来自定义某些用户界面 (UI) 功能。Visual Studio Tools for Office 通过为您实现这些接口并提供您可作为替代项使用的类和设计器而简化了此过程。不过,您也可以直接在外接程序中实现扩展性接口。

有关 Visual Studio Tools for Office 为这些功能提供的类和设计器的更多信息,请参见自定义任务窗格概述功能区设计器创建 Outlook 窗体区域

可在外接程序中实现的扩展性接口

下表列出了您可以实现的扩展性接口以及支持这些接口的应用程序。

接口

说明

应用程序

Microsoft.Office.Core.IRibbonExtensibility

实现此接口可自定义功能区 UI。有关更多信息,请参见 2007 Microsoft Office 文档中的 IRibbonExtensibility 对象

Bb608601.alert_note(zh-cn,VS.90).gif说明:
可以将“功能区(XML)”项添加到项目,以便在外接程序中生成 Microsoft.Office.Core.IRibbonExtensibility 的默认实现。有关更多信息,请参见功能区 XML

Excel 2007

InfoPath 2007

Outlook 2007

PowerPoint 2007

Word 2007

Microsoft.Office.Core.ICustomTaskPaneConsumer

实现此接口可创建自定义任务窗格。有关更多信息,请参见 2007 Microsoft Office 文档中的 ICustomTaskPaneConsumer 对象

Excel 2007

Outlook 2007

PowerPoint 2007

Word 2007

Microsoft.Office.Interop.Outlook.FormRegionStartup

实现此接口可创建 Outlook 窗体区域。有关更多信息,请参见 2007 Microsoft Office 文档中的 FormRegionStartup 接口

Outlook 2007

2007 Microsoft Office system 中的应用程序还定义了其他一些扩展性接口,例如 Microsoft.Office.Core.IBlogExtensibilityMicrosoft.Office.Core.EncryptionProviderMicrosoft.Office.Core.SignatureProvider。Visual Studio Tools for Office 不支持在外接程序中实现这些接口。

使用扩展性接口

若要使用扩展性接口自定义 UI 功能,请在外接程序项目中实现相应的接口。然后,重写 RequestService 方法以返回实现该接口的类的实例。

有关演示如何在 Excel 外接程序中实现 Microsoft.Office.Core.IRibbonExtensibilityMicrosoft.Office.Core.ICustomTaskPaneConsumer 接口的示例应用程序,请参见运行时服务示例

实现扩展性接口的示例

下面的代码示例演示用于创建自定义任务窗格的 Microsoft.Office.Core.ICustomTaskPaneConsumer 接口的简单实现。此示例定义两个类:

  • TaskPaneHelper 类实现 Microsoft.Office.Core.ICustomTaskPaneConsumer 以创建和显示自定义任务窗格。

  • TaskPaneUI 类提供任务窗格的 UI。TaskPaneUI 类的属性使类对于 COM 可见,从而使 Microsoft Office 应用程序能够发现该类。在此示例中,UI 是一个空 UserControl,但您可以通过修改代码来添加控件。

    Bb608601.alert_note(zh-cn,VS.90).gif说明:

    若要向 COM 公开 TaskPaneUI 类,您必须同时为项目设置“为 COM 互操作注册”属性。有关更多信息,请参见 如何:为 COM Interop 注册组件

Public Class TaskPaneHelper
    Implements Office.ICustomTaskPaneConsumer

    Friend taskPane As Office.CustomTaskPane

    Public Sub CTPFactoryAvailable(ByVal CTPFactoryInst As Office.ICTPFactory) _
        Implements Office.ICustomTaskPaneConsumer.CTPFactoryAvailable

        If CTPFactoryInst IsNot Nothing Then
            ' Create a new task pane.
            taskPane = CTPFactoryInst.CreateCTP( _
                "Microsoft.Samples.Vsto.VB.TaskPaneUI", "Contoso")
            taskPane.Visible = True
        End If
    End Sub
End Class

<System.Runtime.InteropServices.ComVisible(True)> _
<System.Runtime.InteropServices.ProgId("Microsoft.Samples.Vsto.VB.TaskPaneUI")> _
<System.Runtime.InteropServices.Guid("FFA0920E-F7A5-453d-8AB2-249F4C25B4B2")> _
Public Class TaskPaneUI
    Inherits UserControl
End Class
public class TaskPaneHelper : Office.ICustomTaskPaneConsumer
{
    internal Office.CustomTaskPane taskPane;

    public void CTPFactoryAvailable(Office.ICTPFactory CTPFactoryInst)
    {
        if (CTPFactoryInst != null)
        {
            // Create a new task pane.
            taskPane = CTPFactoryInst.CreateCTP(
                "Microsoft.Samples.Vsto.CS.TaskPaneUI",
                "Contoso", Type.Missing);
            taskPane.Visible = true;
        }
    }
}

[System.Runtime.InteropServices.ComVisible(true)]
[System.Runtime.InteropServices.ProgId("Microsoft.Samples.Vsto.CS.TaskPaneUI")]
[System.Runtime.InteropServices.Guid("FFA0920E-F7A5-453d-8AB2-249F4C25B4B2")]
public class TaskPaneUI : UserControl
{
}

有关实现 Microsoft.Office.Core.ICustomTaskPaneConsumer 的更多信息,请参见 2007 Microsoft Office 文档中的在 2007 Office system 中创建自定义任务窗格

重写 RequestService 方法的示例

下面的代码示例演示如何重写 RequestService 方法以从前面的代码示例中返回 TaskPaneHelper 类的实例。它将检查 serviceGuid 参数的值以确定请求的是哪个接口,然后返回实现该接口的对象。

Friend taskPaneHelper1 As TaskPaneHelper

Protected Overrides Function RequestService( _
    ByVal serviceGuid As Guid) As Object

    If (serviceGuid = GetType(Office.ICustomTaskPaneConsumer).GUID) Then
        If (taskPaneHelper1 Is Nothing) Then
            taskPaneHelper1 = New TaskPaneHelper()
        End If
        Return taskPaneHelper1
    End If

    Return MyBase.RequestService(serviceGuid)
End Function
internal TaskPaneHelper taskPaneHelper1;

protected override object RequestService(Guid serviceGuid)
{
    if (serviceGuid == typeof(Office.ICustomTaskPaneConsumer).GUID)
    {
        if (taskPaneHelper1 == null)
        {
            taskPaneHelper1 = new TaskPaneHelper();
        }
        return taskPaneHelper1;
    }

    return base.RequestService(serviceGuid);
}

请参见

任务

运行时服务示例

如何:创建 Visual Studio Tools for Office 项目

概念

应用程序级外接程序编程

开发 Office 解决方案

AddIn 宿主项

从其他 Office 解决方案调用应用程序级外接程序中的代码

应用程序级外接程序的体系结构