다음을 통해 공유


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

Visual Studio의 Office 개발 도구에는 많은 구현 세부 사항을 처리하는 클래스와 디자이너가 제공되며, 이를 사용하여 VSTO 추가 기능에 사용자 지정 작업창, 리본 사용자 지정, Outlook 양식 영역을 만들 수 있습니다. 하지만 특별한 요구 사항이 있는 경우 각각의 기능에 대한 확장성 인터페이스 를 직접 구현할 수도 있습니다.

적용 대상: 이 항목의 정보는 VSTO 추가 기능 프로젝트에 적용됩니다. 자세한 내용은 Office 애플리케이션 및 프로젝트 형식에 따라 사용 가능한 기능을 참조하세요.

Microsoft Office에서는 COM VSTO 추가 기능이 리본 같은 특정 기능을 사용자 지정하기 위해 구현할 수 있는 일련의 확장성 인터페이스를 정의합니다. 이러한 인터페이스는 액세스를 지원하는 기능에 대한 모든 권한을 제공합니다. 하지만 이러한 인터페이스를 구현하려면 관리 코드의 COM 상호 운용성에 대해 어느 정도 이해하고 있어야 합니다. 경우에 따라 .NET Framework에 익숙한 개발자 입장에서는 이러한 인터페이스의 프로그래밍 모델이 직관적으로 파악되지 않기도 합니다.

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

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

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

다음 표에는 구현할 수 있는 확장성 인터페이스와 이러한 인터페이스를 지원하는 애플리케이션이 나와 있습니다.

인터페이스 설명 애플리케이션
IRibbonExtensibility 리본 UI를 사용자 지정하려면 이 인터페이스를 구현합니다. 참고: 프로젝트에 리본(XML) 항목을 추가하여 VSTO 추가 기능에서 기본 IRibbonExtensibility 구현을 생성할 수 있습니다. 자세한 내용은 Ribbon XML을 참조하세요. Excel

InfoPath 2013

InfoPath 2010

Outlook

PowerPoint

Project

Visio

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

Outlook

PowerPoint

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

IBlogExtensibility, EncryptionProvider, SignatureProvider같은 Microsoft Office에 정의된 그 밖의 여러 확장성 인터페이스도 있습니다. Visual Studio에서는 Office 프로젝트 템플릿을 사용하여 만든 VSTO 추가 기능에 이러한 인터페이스를 구현하는 기능을 지원하지 않습니다.

확장성 인터페이스 사용

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

Outlook용 VSTO 추가 기능에 IRibbonExtensibility, ICustomTaskPaneConsumerFormRegionStartup 인터페이스를 구현하는 방법을 보여 주는 애플리케이션 예제는 Office Development Samples를 참조하세요.

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

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

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

  • TaskPaneUI 클래스에서는 작업창의 UI를 제공합니다. TaskPaneUI 클래스의 특성은 클래스를 COM에 노출하여 Microsoft Office 애플리케이션에서 클래스를 검색할 수 있도록 합니다. 이 예제에서 UI는 빈 UserControl이지만 코드를 수정하여 컨트롤을 추가할 수 있습니다.

    참고 항목

    TaskPaneUI 클래스를 COM에 노출하려면 프로젝트에 대해 COM interop 등록 속성도 설정해야 합니다.

    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에서 사용자 지정 작업창 만들기 를 참조하세요.

RequestService 메서드 재정의 예제

다음 코드 예제에서는 RequestService 메서드를 재정의하여 이전 코드 예제의 TaskPaneHelper 클래스 인스턴스를 반환하는 방법을 보여 줍니다. 또한 serviceGuid 매개 변수 값을 확인하여 요청되는 인터페이스를 파악한 후 이 인터페이스를 구현하는 개체를 반환합니다.

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