使用扩展性接口自定义 UI 功能
更新:2007 年 11 月
适用对象 |
---|
本主题中的信息仅适用于指定的 Visual Studio Tools for Office 项目和 Microsoft Office 版本。 项目类型
Microsoft Office 版本
有关更多信息,请参见按应用程序和项目类型提供的功能。 |
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 对象。
说明:
可以将“功能区(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.IBlogExtensibility、Microsoft.Office.Core.EncryptionProvider 和 Microsoft.Office.Core.SignatureProvider。Visual Studio Tools for Office 不支持在外接程序中实现这些接口。
使用扩展性接口
若要使用扩展性接口自定义 UI 功能,请在外接程序项目中实现相应的接口。然后,重写 RequestService 方法以返回实现该接口的类的实例。
有关演示如何在 Excel 外接程序中实现 Microsoft.Office.Core.IRibbonExtensibility 和 Microsoft.Office.Core.ICustomTaskPaneConsumer 接口的示例应用程序,请参见运行时服务示例。
实现扩展性接口的示例
下面的代码示例演示用于创建自定义任务窗格的 Microsoft.Office.Core.ICustomTaskPaneConsumer 接口的简单实现。此示例定义两个类:
TaskPaneHelper 类实现 Microsoft.Office.Core.ICustomTaskPaneConsumer 以创建和显示自定义任务窗格。
TaskPaneUI 类提供任务窗格的 UI。TaskPaneUI 类的属性使类对于 COM 可见,从而使 Microsoft Office 应用程序能够发现该类。在此示例中,UI 是一个空 UserControl,但您可以通过修改代码来添加控件。
说明: 若要向 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 项目