Compartilhar 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 manipulam 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 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 Recursos disponíveis por aplicativo e tipo de projeto do Office.

O Microsoft Office define um conjunto de interfaces de extensibilidade que os suplementos COM VSTO podem implementar para personalizar determinados recursos, como a faixa de opções. Essas interfaces fornecem controle total sobre os recursos aos quais fornecem acesso. No entanto, a implementação dessas interfaces requer algum conhecimento de interoperabilidade COM em 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.

Quando você cria 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 tempo de execução do Visual Studio Tools for 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 no 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, Designer da faixa de opções 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 oferecem suporte a elas.

Interface Descrição Aplicativos
IRibbonExtensibility Implemente essa interface para personalizar a interface do usuário da faixa de opções. Nota: Você pode adicionar um item da Faixa de Opções (XML) a um projeto para gerar uma implementação padrão IRibbonExtensibility no suplemento VSTO. Para obter mais informações, consulte XML da faixa de opções. Excel

InfoPath 2013

InfoPath 2010

Outlook

PowerPoint

Project

Visio

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

Outlook

PowerPoint

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

Há várias outras interfaces de extensibilidade 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 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 método para retornar uma instância da classe que implementa RequestService a interface.

Para obter um aplicativo de exemplo que demonstra como implementar o , e FormRegionStartup interfaces em um suplemento VSTO para Outlook, ICustomTaskPaneConsumerconsulte o IRibbonExtensibilityexemplo do Gerenciador de interface do usuário em exemplos de desenvolvimento do Office.

Exemplo de implementação de uma interface de extensibilidade

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

  • A TaskPaneHelper classe implementa para criar e exibir um painel de ICustomTaskPaneConsumer 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 é um UserControl, vazio, mas você pode adicionar controles modificando o código.

    Observação

    Para expor a classe para COM, você também deve definir a TaskPaneUIpropriedade 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 como implementar ICustomTaskPaneConsumero , consulte Criar painéis de tarefas personalizados no 2007 Office System 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);
}