확장성 인터페이스를 사용 하 여 UI 기능 사용자 지정Customize UI features by using extensibility interfaces

Visual Studio의 Office 개발 도구에는 많은 구현 세부 사항을 처리하는 클래스와 디자이너가 제공되며, 이를 사용하여 VSTO 추가 기능에 사용자 지정 작업창, 리본 사용자 지정, Outlook 양식 영역을 만들 수 있습니다.The Office development tools in Visual Studio provide classes and designers that handle many implementation details when you use them to create custom task panes, ribbon customizations, and Outlook form regions in a VSTO Add-in. 하지만 특별한 요구 사항이 있는 경우 각각의 기능에 대한 확장성 인터페이스 를 직접 구현할 수도 있습니다.However, you can also implement the extensibility interface for each feature yourself if you have special requirements.

적용 대상: 이 항목의 정보는 VSTO 추가 기능의 프로젝트에 적용 됩니다 - .Applies to: The information in this topic applies to VSTO Add-in projects. 자세한 내용은 Office 응용 프로그램 및 프로젝트 형식에 따라 사용 가능한 기능을 참조 하세요.For more information, see Features available by Office application and project type.

확장성 인터페이스 개요Overview of extensibility interfaces

Microsoft Office에서는 COM VSTO 추가 기능이 리본 같은 특정 기능을 사용자 지정하기 위해 구현할 수 있는 일련의 확장성 인터페이스를 정의합니다.Microsoft Office defines a set of extensibility interfaces that COM VSTO Add-ins can implement to customize certain features, such as the ribbon. 이러한 인터페이스는 액세스를 지원하는 기능에 대한 모든 권한을 제공합니다.These interfaces provide full control over the features they provide access to. 하지만 이러한 인터페이스를 구현하려면 관리 코드의 COM 상호 운용성에 대해 어느 정도 이해하고 있어야 합니다.However, implementing these interfaces requires some knowledge of COM interoperability in managed code. 경우에 따라 .NET Framework에 익숙한 개발자 입장에서는 이러한 인터페이스의 프로그래밍 모델이 직관적으로 파악되지 않기도 합니다.In some cases, the programming model of these interfaces is also not intuitive for developers who are accustomed to the .NET Framework.

Visual Studio의 Office 프로젝트 템플릿을 사용하여 VSTO 추가 기능을 만드는 경우에는 리본 같은 기능을 사용자 지정하기 위해 확장성 인터페이스를 구현할 필요가 없습니다.When you create a VSTO Add-in by using the Office project templates in Visual Studio, you do not have to implement the extensibility interfaces to customize features like the ribbon. Microsoft Visual Studio Tools for Office RuntimeVisual Studio Tools for Office runtime 은 이러한 인터페이스를 자동으로 구현합니다.The Microsoft Visual Studio Tools for Office RuntimeVisual Studio Tools for Office runtime implements these interfaces for you. 대신 Visual Studio에서 제공하는 보다 직관적인 클래스와 디자이너를 사용할 수 있습니다.Instead, you can use more intuitive classes and designers provided by Visual Studio. 하지만 원하는 경우에는 여전히 VSTO 추가 기능에 바로 확장성 인터페이스를 구현할 수도 있습니다.However, you can still implement the extensibility interfaces directly in your VSTO Add-in if you want to.

Visual Studio에서 이러한 기능에 대해 제공 하는 클래스 및 디자이너에 대 한 자세한 내용은 사용자 지정 작업창, 리본 디자이너Outlook 양식 영역 만들기를 참조 하세요.For more information about the classes and designers that Visual Studio provides for these features, see Custom task panes, Ribbon designer, and Create Outlook form regions.

VSTO 추가 기능에서 구현할 수 있는 확장성 인터페이스Extensibility interfaces you can implement in a VSTO Add-in

다음 표에는 구현할 수 있는 확장성 인터페이스와 이러한 인터페이스를 지원하는 애플리케이션이 나와 있습니다.The following table lists the extensibility interfaces you can implement and the applications that support them.

인터페이스Interface DescriptionDescription 애플리케이션Applications
IRibbonExtensibility 리본 UI를 사용자 지정하려면 이 인터페이스를 구현합니다.Implement this interface to customize the ribbon UI. 참고: 프로젝트에 리본 (XML) 항목을 추가 하 여 IRibbonExtensibility VSTO 추가 기능에 기본 구현을 생성할 수 있습니다.Note: You can add a Ribbon (XML) item to a project to generate a default IRibbonExtensibility implementation in your VSTO Add-in. 자세한 내용은 Ribbon XML을 참조하세요.For more information, see Ribbon XML. ExcelExcel

InfoPath 2013InfoPath 2013

InfoPath 2010InfoPath 2010

OutlookOutlook

PowerPointPowerPoint

ProjectProject

VisioVisio

WordWord
ICustomTaskPaneConsumer 사용자 지정 작업창을 만들려면 이 인터페이스를 구현합니다.Implement this interface to create a custom task pane. ExcelExcel

OutlookOutlook

PowerPointPowerPoint

WordWord
FormRegionStartup Outlook 양식 영역을 만들려면 이 인터페이스를 구현합니다.Implement this interface to create an Outlook form region. OutlookOutlook

IBlogExtensibility, EncryptionProvider, SignatureProvider같은 Microsoft Office에 정의된 그 밖의 여러 확장성 인터페이스도 있습니다.There are several other extensibility interfaces that are defined by Microsoft Office, such as IBlogExtensibility, EncryptionProvider, and SignatureProvider. Visual Studio에서는 Office 프로젝트 템플릿을 사용하여 만든 VSTO 추가 기능에 이러한 인터페이스를 구현하는 기능을 지원하지 않습니다.Visual Studio does not support implementing these interfaces in a VSTO Add-in created by using the Office project templates.

확장성 인터페이스 사용Use extensibility interfaces

확장성 인터페이스를 사용하여 UI 기능을 사용자 지정하려면 VSTO 추가 기능 프로젝트에 적절한 인터페이스를 구현합니다.To customize a UI feature by using an extensibility interface, implement the appropriate interface in your VSTO Add-in project. 그런 다음 RequestService 메서드를 재정의하여 인터페이스를 구현하는 클래스의 인스턴스를 반환합니다.Then, override the RequestService method to return an instance of the class that implements the interface.

Outlook 용 VSTO 추가 기능에서, 및 인터페이스를 구현 하는 방법을 보여 주는 샘플 응용 프로그램은 IRibbonExtensibility ICustomTaskPaneConsumer FormRegionStartup OFFICE 개발 샘플에서 UI Manager 샘플을 참조 하세요.For a sample application that demonstrates how to implement the IRibbonExtensibility, ICustomTaskPaneConsumer, and FormRegionStartup interfaces in a VSTO Add-in for Outlook, see the UI Manager Sample in Office development samples.

확장성 인터페이스를 구현 하는 예제Example of implementing an extensibility interface

다음 코드 예제에서는 사용자 지정 작업창을 만들기 위한 ICustomTaskPaneConsumer 인터페이스의 간단한 구현을 보여 줍니다.The following code example demonstrates a simple implementation of the ICustomTaskPaneConsumer interface to create a custom task pane. 이 예제에서는 다음 두 개의 클래스를 정의합니다.This example defines two classes:

  • TaskPaneHelper 클래스는 ICustomTaskPaneConsumer 를 구현하여 사용자 지정 작업창을 만들고 표시합니다.The TaskPaneHelper class implements ICustomTaskPaneConsumer to create and display a custom task pane.

  • TaskPaneUI 클래스에서는 작업창의 UI를 제공합니다.The TaskPaneUI class provides the UI of the task pane. TaskPaneUI 클래스의 특성은 클래스를 COM에 노출하여 Microsoft Office 애플리케이션에서 클래스를 검색할 수 있도록 합니다.The attributes for the TaskPaneUI class make the class visible to COM, which enables Microsoft Office applications to discover the class. 이 예제에서 UI는 빈 UserControl이지만 코드를 수정하여 컨트롤을 추가할 수 있습니다.In this example, the UI is an empty UserControl, but you can add controls by modifying the code.

    참고

    TaskPaneUI 클래스를 COM에 노출하려면 프로젝트에 대해 COM interop 등록 속성도 설정해야 합니다.To expose the TaskPaneUI class to COM, you must also set the Register for COM Interop property for the project.

    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");
                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
    {
    }
    

    구현에 대 한 자세한 내용은 ICustomTaskPaneConsumer Microsoft Office 설명서의 2007 Office system에서 사용자 지정 작업창 만들기 를 참조 하세요.For more information about implementing ICustomTaskPaneConsumer, see Create custom task panes in the 2007 Office system in the Microsoft Office documentation.

RequestService 메서드 재정의 예제Example of overriding the RequestService method

다음 코드 예제에서는 RequestService 메서드를 재정의하여 이전 코드 예제의 TaskPaneHelper 클래스 인스턴스를 반환하는 방법을 보여 줍니다.The following code example demonstrates how to override the RequestService method to return an instance of the TaskPaneHelper class from the previous code example. 또한 serviceGuid 매개 변수 값을 확인하여 요청되는 인터페이스를 파악한 후 이 인터페이스를 구현하는 개체를 반환합니다.It checks the value of the serviceGuid parameter to determine which interface is being requested, and then returns an object that implements that interface.

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);
}

참고 항목See also