Compartilhar via


Personalizar recursos de 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 ao usá-los para criar painéis de tarefas personalizados, personalizações de 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 se tiver requisitos especiais.

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

O Microsoft Office define um conjunto de interfaces de extensibilidade que os Suplementos COM VSTO podem implementar para personalizar determinados recursos, como o Ribbon. 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 no código gerenciado. Em alguns casos, o modelo de programação dessas interfaces também não é intuitivo para desenvolvedores acostumados com o .NET Framework.

Ao criar um Suplemento VSTO usando os modelos de projeto do Office no Visual Studio, você não precisa implementar as interfaces de extensibilidade para personalizar recursos como a faixa de opções. O runtime das Ferramentas do Visual Studio para Office implementa essas interfaces para você. Em vez disso, você pode usar classes e designers mais intuitivos fornecidos pelo Visual Studio. No entanto, você ainda pode implementar as interfaces de extensibilidade diretamente em seu Suplemento 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, Ribbon Designer e Criar regiões de formulário do Outlook.

Interfaces de extensibilidade que você pode implementar em um suplemento VSTO

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

Interfase Description Aplicativos
IRibbonExtensibility Implemente essa interface para personalizar a faixa de opções. Nota: Você pode adicionar um item Ribbon (XML) a um projeto para gerar uma implementação padrão IRibbonExtensibility em seu Add-in VSTO. Para obter mais informações, consulte Ribbon XML. Excel

InfoPath 2013

InfoPath 2010

Perspectiva

PowerPoint

Projeto

Visio

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

Perspectiva

PowerPoint

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

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

Usar interfaces de extensibilidade

Para personalizar um recurso de interface do usuário usando uma interface de extensibilidade, implemente a interface apropriada em seu projeto de Suplemento VSTO. Em seguida, substitua o RequestService método para retornar uma instância da classe que implementa a interface.

Para um aplicativo de exemplo que demonstra como implementar as interfaces IRibbonExtensibility, ICustomTaskPaneConsumer, e FormRegionStartup em um suplemento VSTO para o Outlook, veja o Exemplo do Gerenciador de Interface do Usuário nos 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 exibir um painel de tarefas personalizado.

  • A TaskPaneUI classe fornece a interface do usuário do painel de tarefas. Os atributos da 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 do usuário é vazia UserControl, mas você pode adicionar controles modificando o código.

    Observação

    Para expor a TaskPaneUI classe ao COM, você também deve definir a propriedade Registrar para Interoperabilidade COM 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 ICustomTaskPaneConsumer, consulte Criar painéis de tarefas personalizados no sistema do 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 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);
}