다음을 통해 공유


확장성 인터페이스를 사용하여 UI 기능 사용자 지정

Visual Studio의 Office 개발 도구에서는 여러 가지 구현 정보를 사용하여 응용 프로그램 수준 추가 기능의 사용자 지정 작업 창, 리본 메뉴 사용자 지정 및 Outlook 양식 영역을 만들 때 구현 정보를 처리하는 클래스 및 디자이너를 제공합니다. 그러나 특별한 요구 사항이 있는 경우 사용자가 직접 각 기능에 대한 확장성 인터페이스를 구현할 수도 있습니다.

적용 대상: 이 항목의 정보는 Microsoft Office 2010 및 2007 Microsoft Office system의 응용 프로그램 수준 프로젝트에 적용됩니다. 자세한 내용은 Office 응용 프로그램 및 프로젝트 형식에 따라 사용 가능한 기능을 참조하십시오.

확장성 인터페이스 개요

Microsoft Office에서는 COM 추가 기능에서 리본 메뉴 등의 일부 기능을 사용자 지정하기 위해 구현할 수 있는 확장성 인터페이스의 집합을 정의합니다. 이러한 인터페이스에서는 해당 인터페이스를 통해 액세스할 수 있는 기능을 완전히 제어할 수 있습니다. 그러나 이러한 인터페이스를 구현하려면 관리 코드의 COM 상호 운용성에 대해 알고 있어야 합니다. 일부 경우 .NET Framework에 익숙한 개발자에게는 이러한 인터페이스의 프로그래밍 모델이 생소할 수도 있습니다.

Visual Studio의 Office 프로젝트 템플릿을 사용하여 추가 기능을 만드는 경우에는 리본 메뉴와 같은 기능을 사용자 지정하기 위해 확장성 인터페이스를 구현할 필요가 없습니다. Microsoft Visual Studio Tools for Office Runtime에서 이러한 인터페이스를 자동으로 구현합니다. 대신 Visual Studio에서 제공하는 더욱 편리한 클래스 및 디자이너를 사용할 수 있습니다. 그러나 필요한 경우 여전히 추가 기능에서 직접 확장성 인터페이스를 구현할 수도 있습니다.

Visual Studio에서 이러한 기능을 위해 제공하는 클래스 및 디자이너에 대한 자세한 내용은 사용자 지정 작업 창 개요, 리본 디자이너Outlook 양식 영역 만들기를 참조하십시오.

추가 기능에서 구현할 수 있는 확장성 인터페이스

다음 표에는 구현할 수 있는 확장성 인터페이스 및 확장성 인터페이스를 지원하는 응용 프로그램이 나와 있습니다.

Interface

설명

응용 프로그램

Microsoft.Office.Core.IRibbonExtensibility

리본 UI를 사용자 지정하려면 이 인터페이스를 구현합니다.

참고참고
프로젝트에 리본(XML) 항목을 추가하여 추가 기능에 기본 Microsoft.Office.Core.IRibbonExtensibility 구현을 생성할 수 있습니다.자세한 내용은 리본 XML을 참조하십시오.

Excel 2007 및 Excel 2010

InfoPath 2010

Outlook 2007 및 Outlook 2010

PowerPoint 2007 및 PowerPoint 2010

Project 2010

Visio 2010

Word 2007 및 Word 2010

Microsoft.Office.Core.ICustomTaskPaneConsumer

사용자 지정 작업 창을 만들려면 이 인터페이스를 구현합니다.

Excel 2007 및 Excel 2010

Outlook 2007 및 Outlook 2010

PowerPoint 2007 및 PowerPoint 2010

Word 2007 및 Word 2010

Microsoft.Office.Interop.Outlook.FormRegionStartup

Outlook 양식 영역을 만들려면 이 인터페이스를 구현합니다.

Outlook 2007 및 Outlook 2010

Microsoft Office에는 Microsoft.Office.Core.IBlogExtensibility, Microsoft.Office.Core.EncryptionProviderMicrosoft.Office.Core.SignatureProvider 등의 다른 여러 확장성 인터페이스가 정의되어 있습니다. Visual Studio에서는 Office 프로젝트 템플릿을 사용하여 만든 추가 기능에 이러한 인터페이스를 구현할 수 없습니다.

확장성 인터페이스 사용

확장성 인터페이스를 사용하여 UI 기능을 사용자 지정하려면 추가 기능 프로젝트에서 적절한 인터페이스를 구현합니다. 그런 다음 해당 인터페이스를 구현하는 클래스의 인스턴스를 반환하도록 RequestService 메서드를 재정의합니다.

Outlook용 추가 기능에서 Microsoft.Office.Core.IRibbonExtensibility, Microsoft.Office.Core.ICustomTaskPaneConsumerMicrosoft.Office.Interop.Outlook.FormRegionStartup 인터페이스를 구현하는 방법을 보여 주는 샘플 응용 프로그램은 Office 개발 샘플의 UI 관리자 샘플을 참조하십시오.

확장성 인터페이스의 구현 예제

다음 코드 예제에서는 사용자 지정 작업 창을 만들기 위한 Microsoft.Office.Core.ICustomTaskPaneConsumer 인터페이스의 간단한 구현을 보여 줍니다. 이 예제에서는 다음 두 개의 클래스를 정의합니다.

  • Microsoft.Office.Core.ICustomTaskPaneConsumer를 구현하여 사용자 지정 작업 창을 만들고 표시하는 TaskPaneHelper 클래스

  • 작업 창의 UI를 제공하는 TaskPaneUI 클래스. TaskPaneUI 클래스의 특성은 Microsoft Office 응용 프로그램에서 클래스를 검색할 수 있도록 COM에 해당 클래스를 표시합니다. 이 예제에서 UI는 빈 UserControl이지만 코드를 수정하여 컨트롤을 추가할 수 있습니다.

    참고

    COM에 TaskPaneUI 클래스를 노출하려면 프로젝트의 COM Interop 등록 속성도 설정해야 합니다. 자세한 내용은 방법: 구성 요소 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를 구현하는 방법에 대한 자세한 내용은 Microsoft Office 설명서의 Creating Custom Task Panes in the 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에서 Office 프로젝트 만들기

개념

다른 Office 솔루션에서 응용 프로그램 수준 추가 기능의 코드 호출

응용 프로그램 수준 추가 기능 아키텍처

기타 리소스

Office 개발 샘플 및 연습

응용 프로그램 수준 추가 기능 프로그래밍

Office 솔루션 개발