Personnaliser les fonctionnalités de l’interface utilisateur à l’aide d’interfaces d’extensibilité

Les Outils de développement Office dans Visual Studio fournissent des classes et des concepteurs qui gèrent de nombreux détails d’implémentation quand vous les utilisez pour créer des volets de tâches personnalisés, des personnalisations de ruban et des zones de formulaire Outlook dans un complément VSTO. Toutefois, vous pouvez également implémenter vous-même l' interface d'extensibilité pour chaque fonctionnalité si vous avez des spécifications spéciales.

S’applique à : les informations contenues dans cette rubrique s’appliquent aux projets de complément VSTO. Pour plus d’informations, consultez Fonctionnalités disponibles par application Office lication et le type de projet.

Microsoft Office définit un ensemble d’interfaces d’extensibilité que les compléments VSTO COM peuvent implémenter pour personnaliser certaines fonctionnalités, comme le ruban. Ces interfaces fournissent un contrôle total sur les fonctionnalités auxquelles elles donnent accès. Toutefois, l'implémentation de ces interfaces requiert une certaine connaissance de l'interopérabilité COM dans le code managé. Dans certains cas, le modèle de programmation de ces interfaces n'est également pas intuitif pour les développeurs habitués au .NET Framework.

Quand vous créez un complément VSTO en utilisant les modèles de projet Office dans Visual Studio, vous n’avez pas à implémenter les interfaces d’extensibilité pour personnaliser des fonctionnalités comme le ruban. Le runtime Visual Studio Tools pour Office implémente ces interfaces pour vous. Vous pouvez plutôt utiliser les classes et concepteurs plus intuitifs fournis par Visual Studio. Toutefois, vous pouvez quand même implémenter directement les interfaces d’extensibilité dans votre complément VSTO si vous le souhaitez.

Pour plus d’informations sur les classes et les concepteurs que Visual Studio fournit pour ces fonctionnalités, consultez les volets Office personnalisés, le concepteur de ruban et créer des zones de formulaire Outlook.

Interfaces d’extensibilité que vous pouvez implémenter dans un complément VSTO

Le tableau suivant répertorie les interfaces d'extensibilité que vous pouvez implémenter et les applications qui les prennent en charge.

Interface Description Applications
IRibbonExtensibility Implémentez cette interface pour personnaliser l'interface utilisateur du ruban. Remarque : vous pouvez ajouter un élément de ruban (XML) à un projet pour générer une implémentation par défaut IRibbonExtensibility dans votre complément VSTO. Pour plus d'informations, consultez Ribbon XML. Excel

InfoPath 2013

InfoPath 2010

Outlook

PowerPoint

Project

Visio

Word
ICustomTaskPaneConsumer Implémentez cette interface pour créer un volet de tâches personnalisé. Excel

Outlook

PowerPoint

Word
FormRegionStartup Implémentez cette interface pour créer une zone de formulaire Outlook. Outlook

Il existe plusieurs autres interfaces d'extensibilité définies par Microsoft Office, comme IBlogExtensibility, EncryptionProvideret SignatureProvider. Visual Studio ne prend pas en charge l’implémentation de ces interfaces dans un complément VSTO créé à l’aide des modèles de projet Office.

Utiliser des interfaces d’extensibilité

Pour personnaliser une fonctionnalité d’interface utilisateur à l’aide d’une interface d’extensibilité, implémentez l’interface appropriée dans votre projet de complément VSTO. Substituez ensuite la méthode RequestService pour retourner une instance de la classe qui implémente l'interface.

Pour obtenir un exemple d’application qui montre comment implémenter les interfaces et les IRibbonExtensibilityinterfaces dans un complément VSTO pour Outlook, consultez l’exemple UI Manager dans Bureau exemples de FormRegionStartup développement. ICustomTaskPaneConsumer

Exemple d’implémentation d’une interface d’extensibilité

L'exemple de code suivant présente une implémentation simple de l'interface ICustomTaskPaneConsumer pour créer un volet de tâches personnalisé. Cet exemple définit deux classes :

  • La classe TaskPaneHelper implémente ICustomTaskPaneConsumer pour créer et afficher un volet de tâches personnalisé.

  • La classe TaskPaneUI fournit l'interface utilisateur du volet de tâches. Les attributs de la classe TaskPaneUI rendent la classe visible pour COM, ce qui permet aux applications Microsoft Office de la découvrir. Dans cet exemple, l'interface utilisateur est un UserControlvide, mais vous pouvez ajouter des contrôles en modifiant le code.

    Remarque

    Pour exposer la classe TaskPaneUI à COM, vous devez également définir la propriété Inscrire pour COM Interop pour le projet.

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

Pour plus d’informations sur l’implémentationICustomTaskPaneConsumer, consultez Créer des volets Office personnalisés dans le système Bureau 2007 dans la documentation de Microsoft Bureau.

Exemple de substitution de la méthode RequestService

L'exemple de code suivant montre comment substituer la méthode RequestService pour retourner une instance de la classe TaskPaneHelper de l'exemple de code précédent. Il vérifie la valeur du paramètre serviceGuid pour déterminer quelle interface est demandée, puis retourne un objet qui implémente cette 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);
}