Partilhar via


Personalizar recursos da interface do usuário usando interfaces de extensibilidade

As ferramentas de desenvolvimento do Office no Visual Studio fornecem classes e designers que lidam com muitos detalhes de implementação quando você os usa para criar painéis de tarefas personalizados, personalizações da faixa de opções e regiões de formulário do Outlook em um Suplemento VSTO. No entanto, você também pode implementar a interface de extensibilidade para cada recurso por conta própria, se tiver requisitos especiais.

Aplica-se a: As informações neste tópico aplicam-se a projetos de Add-ins VSTO. Para obter mais informações, consulte Recursos disponíveis por aplicativo do Office e tipo de projeto.

Microsoft Office define um conjunto de interfaces de extensibilidade que os suplementos COM VSTO podem implementar para personalizar determinados recursos, como o friso. Essas interfaces fornecem controle total sobre os recursos aos quais fornecem acesso. No entanto, a implementação dessas interfaces requer algum conhecimento da interoperabilidade COM em código gerenciado. Em alguns casos, o modelo de programação dessas interfaces também não é intuitivo para desenvolvedores que estão acostumados com o .NET Framework.

Quando crias um suplemento VSTO usando os modelos de projeto do Office no Visual Studio, não é necessário implementar as interfaces de extensibilidade para personalizar recursos como o friso. O Visual Studio Tools for Office runtime implementa essas interfaces para você. Em vez disso, você pode usar classes e designers mais intuitivos fornecidos pelo Visual Studio. No entanto, ainda é possível implementar as interfaces de extensibilidade diretamente no complemento VSTO, se desejar.

Para obter mais informações sobre as classes e designers que o Visual Studio fornece para esses recursos, consulte Painéis de tarefas personalizados, Designer do Ribbon, e Criar Regiões de Formulário no Outlook.

Interfaces de extensibilidade que pode implementar num complemento VSTO

A tabela a seguir lista as interfaces de extensibilidade que você pode implementar e os aplicativos que oferecem suporte a elas.

Interfaz Description Aplicações
IRibbonExtensibility Implemente essa interface para personalizar a faixa de opções. Nota: Podes adicionar um item Ribbon (XML) a um projeto para gerar uma implementação padrão IRibbonExtensibility no Add-in VSTO. Para obter mais informações, consulte XML da faixa de opções. Excel

InfoPath 2013

InfoPath 2010

Perspetivas

PowerPoint

Projeto

Visio

Palavra
ICustomTaskPaneConsumer Implemente essa interface para criar um painel de tarefas personalizado. Excel

Perspetivas

PowerPoint

Palavra
FormRegionStartup Implemente essa interface para criar uma região de formulário do Outlook. Perspetivas

Existem várias outras interfaces de extensibilidade que são definidas pelo Microsoft Office, como IBlogExtensibility, EncryptionProvidere SignatureProvider. Visual Studio não oferece suporte à implementação dessas interfaces em um suplemento VSTO criado usando os modelos de projeto do Office.

Usar interfaces de extensibilidade

Para personalizar uma funcionalidade de interface do utilizador usando uma interface de extensibilidade, implemente a interface apropriada no seu projeto de complemento VSTO. Em seguida, substitua o RequestService método para retornar uma instância da classe que implementa a interface.

Para obter um aplicativo de exemplo que demonstra como implementar o IRibbonExtensibility, ICustomTaskPaneConsumer e FormRegionStartup interfaces num complemento VSTO para Outlook, consulte o Exemplo do Gestor da Interface do Utilizador em exemplos de desenvolvimento do Office.

Exemplo de implementação de uma interface de extensibilidade

O exemplo de código a seguir demonstra uma implementação simples da ICustomTaskPaneConsumer interface para criar um painel de tarefas personalizado. Este exemplo define duas classes:

  • A TaskPaneHelper classe implementa ICustomTaskPaneConsumer para criar e mostrar um painel de tarefas personalizado.

  • A TaskPaneUI classe fornece a interface do usuário do painel de tarefas. Os atributos para a TaskPaneUI classe tornam a classe visível para COM, o que permite que os aplicativos do Microsoft Office descubram a classe. Neste exemplo, a interface de utilizador é um UserControl, mas pode adicionar controlos ao modificar o código.

    Observação

    Para expor a TaskPaneUI classe para COM, você também deve definir a propriedade Register for COM Interop para o projeto.

    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
    {
    }
    

Para obter mais informações sobre a implementação de ICustomTaskPaneConsumer, consulte Criar painéis de tarefas personalizados no Office 2007 na documentação do Microsoft Office.

Exemplo de substituição do método RequestService

O exemplo de código a seguir demonstra como substituir o RequestService método para retornar uma instância da TaskPaneHelper classe do exemplo de código anterior. Ele verifica o valor do parâmetro serviceGuid para determinar qual interface está sendo solicitada e, em seguida, retorna um objeto que implementa essa interface.

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