다음을 통해 공유


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

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

적용 대상: 이 항목의 정보는 VSTO 추가 기능 프로젝트에 적용됩니다. 자세한 내용은 Office 응용 프로그램 및 프로젝트 유형에서 사용할 수 있는 기능을 참조하세요.

Microsoft Office는 COM VSTO 추가 기능이 리본 메뉴와 같은 특정 기능을 사용자 지정하기 위해 구현할 수 있는 확장성 인터페이스 집합을 정의합니다. 이러한 인터페이스는 액세스를 제공하는 기능을 완전히 제어합니다. 그러나 이러한 인터페이스를 구현하려면 관리 코드에서 COM 상호 운용성에 대한 지식이 필요합니다. 경우에 따라 이러한 인터페이스의 프로그래밍 모델은 .NET Framework에 익숙한 개발자에게도 직관적이지 않습니다.

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

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

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

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

인터페이스 Description 응용 프로그램
IRibbonExtensibility 리본 UI를 사용자 지정하려면 이 인터페이스를 구현합니다. 메모: 프로젝트에 리본 메뉴(XML) 항목을 추가하여 VSTO 추가 기능에서 기본 IRibbonExtensibility 구현을 생성할 수 있습니다. 자세한 내용은 리본 XML을 참조하세요. 엑셀

InfoPath 2013

InfoPath 2010

아웃룩

PowerPoint

프로젝트

Visio

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

아웃룩

PowerPoint

단어
FormRegionStartup 이 인터페이스를 구현하여 Outlook 양식 영역을 만듭니다. 아웃룩

Microsoft Office에서 정의한 다른 여러 확장성 인터페이스(예: IBlogExtensibility, EncryptionProviderSignatureProvider)가 있습니다. Visual Studio는 Office 프로젝트 템플릿을 사용하여 만든 VSTO 추가 기능에서 이러한 인터페이스 구현을 지원하지 않습니다.

확장성 인터페이스 사용

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

Outlook용 VSTO 추가 기능에서 IRibbonExtensibility, ICustomTaskPaneConsumer, FormRegionStartup 인터페이스를 구현하는 방법을 보여 주는 샘플 애플리케이션은 Office 개발 샘플의 UI Manager 샘플을 참조하세요.

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

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

  • 클래스는 TaskPaneHelperICustomTaskPaneConsumer 사용자 지정 작업창을 만들고 표시하기 위해 구현합니다.

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

    비고

    COM에 TaskPaneUI 클래스를 노출하려면, 프로젝트의 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 시스템에서 사용자 지정 작업창 만들기 를 참조하세요.

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