Comment : Fournissez des éléments de boîte à outils personnalisés à l'aide de les assemblys d'interopérabilité
Notes
La méthode recommandée pour ajouter des contrôles personnalisés à la boîte à outils est d'utiliser des modèles de contrôle de la boîte à outils fournis avec Visual Studio 10 SDK.Cette rubrique est conservé uniquement pour la compatibilité descendante, et pour ajouter des contrôles existants à la boîte à outils.
Pour plus d'informations sur la création de contrôles de boîte à outils en utilisant des modèles, consultez Comment : créez un contrôle de boîte à outils qui utilise Windows Forms et le Comment : créez un contrôle de boîte à outils qui utilise WPF.
Un VSPackage sur un assembly d'interopérabilité peut étendre les fonctionnalités de Visual Studioboîte à outils en ajoutant des contrôles ActiveX.
Pour obtenir une liste de formats de presse-papiers de boîte à outils standard de Visual Studio , consultez Boîte à outils (kit de développement Visual Studio SDK).
Pour plus d'informations sur la façon dont un VSPackage gère boîte à outils à l'aide de Kit de développement logiciel Visual Studio, consultez gérer la boîte à outils.
Pour plus d'informations sur la gestion boîte à outils via l'automation, consultez Comment : contrôler la boîte à outils.
Procédures
Les éléments ajoutés à boîte à outils doivent implémenter des formats de presse-papiers standard de boîte à outils à moins que le VSPackage ajoutant des éléments serve de fournisseur d'élément de boîte à outils - proposer des fonctions d'implémentation pour le nouveau format.
pour implémenter le contrôle de boîte à outils
Un élément de boîte à outils fourni par VSPackage a implémenté en code non managé doit implémenter un objet d' IDataObject ou être un contrôle ActiveX )de ce que l'environnement peut obtenir un objet d' IDataObject .
Pour plus d'informations sur l'implémentation de l'objet d' IDataObject pour prendre en charge boîte à outils, consultez IDataObject, TBXITEMINFO, et l' FORMATETC.
Pour ajouter des contrôles règle d'interopérabilité à la boîte à outils
Obtenir des instances de :
IVsToolbox2, qui prend en charge l'ajout de contrôles et des sections (onglets) à boîte à outils et à contrôler d'autres aspects de la configuration de boîte à outils .
IVsToolbox3, qui fournit la prise en charge de la localisation et la persistance des paramètres de Visual Studio .
Notes
L'interface IVsToolbox2 hérite de l'interface IVsToolbox.IVsToolbox3 ne dérive pas d' IVsToolbox2 et n'applique pas ses méthodes.
IVsToolbox3 et IVsToolbox2 sont obtenus en appelant la méthode d' QueryService sur le service d' SVsToolbox à l'aide de l'ID de service d' SID_SVsToolbox.
L'ID d'interface IID_IVSToolbox2 est utilisé pour obtenir IVsToolbox2, et l'ID d'interface IID_IVSToolbox3 retourne IVsToolbox3.
dans l'exemple ci-dessous, l'interface d' IVsToolbox2 est obtenue avec QueryService et l'interface d' IVsToolbox3 en appelant QueryInterface sur l'interface d' IVsToolbox2 .
extern CComModule _Module; CComPtr<IVsToolbox2> srpTbx2; CComPtr<IVsToolbox3> srpTbx3; hr = _Module.QueryService(SID_SVsToolbox, IID_IVsToolbox2, (void**) &srpTbx2)); hr = srpTbx2->QueryInterface( IID_IVsToolbox3, (void **)&srpTbx3)
Utilisez les instances d' IVsToolbox2 et IVsToolbox3 interfaces pour ajouter des tabulations (sections) et des contrôles à boîte à outils.
Dans l'exemple ci-dessous, un nouvel onglet est ajouté à un nom localisé à l'aide de la méthode d' AddTab .
Car ce nom localisé n'est pas invariant, un nom invariant non localisé (dans ce cas L"HTML") est défini par un appel à la méthode d' SetIDOfTab .
Si l'onglet de boîte à outils existe déjà, AddTab2 retourne E_FAIL dans ce cas, on suppose que l'onglet a été correctement ajouté avant qu'une tentative est faite pour récupérer le nom invariant.
Si un onglet a été correctement ajouté, un contrôle basé sur d' IDataObjectest ajouté à boîte à outils; sinon une erreur est retournée.
CComBSTR sbstrID; hr = srpTbx2->AddTab2((WCHAR*)szwDisplayTabName, *pclsidPackage); if ( hr == S_OK) { sbstrID =L"HTML"; hr = srpTbx3->SetIDOfTab( (WCHAR*)szwDisplayTabName, sbstrID); }else{ hr = S_OK; hr = srpTbx3->GetIDOfTab( (WCHAR*)szwDisplayTabName, &sbstrID ); } if ( hr = S_OK){ hr=srpTbx2->AddItem(tbxItem, &tinfo, bstrLabel); } return hr;
En plus de l'ajout à boîte à outils lui-même, un VSPackage peut être configuré comme fournisseur de données de boîte à outils et peut être utilisé pour étendre la prise en charge du glisser-déplacer à Visual Studio l'IDE. Cela permet aux formats de presse-papiers arbitraires à exposer à boîte à outils et aux éditeurs.
Pour configurer VSPackage en tant que fournisseur d'élément de boîte à outils
Enregistrez le VSPackage d'interopérabilité-basé en tant que fournisseur d'élément de boîte à outils .
Pour plus d'informations sur l'enregistrement comme fournisseur de boîte à outils , consultez Stocker des fonctionnalités de prise en charge de la boîte à outils.
Registre comme format de presse-papiers personnalisés de prise en charge de boîte à outils .
VSPackage D'interopérabilité-basé prenant en charge les contrôles qui n'implémentent pas tous les formats de presse-papiers standard de boîte à outils ou n'implémentent pas un format de presse-papiers personnalisé de boîte à outils doit :
enregistrez les formats de presse-papiers de boîte à outils qu'ils prennent en charge. Pour plus d'informations, consultez Stocker des fonctionnalités de prise en charge de la boîte à outils.
créez une classe implémentant les interfaces d' IVsToolboxDataProvider et d' IVsToolboxDataProvider2 .
Notes
Les interfaces d' IVsToolboxDataProvider et d' IVsToolboxDataProvider2 ne doivent pas être implémentées sur la même classe qui implémente l'interface d' IVsPackage .
Informez par programme à la boîte à outils qu'une implémentation spécifique des interfaces d' IVsToolboxDataProvider et d' IVsToolboxDataProvider2 fournit la prise en charge des formats de données personnalisés auprès de l'RegisterDataProvider équivalent ou d' RegisterDataProviderde méthodes.
Appeler la méthode d' RegisterDataProvider est généralement fait dans l'implémentation de la méthode de SetSite ou dans la méthode de gestionnaire d' OnCreate lorsque le VSPackage est activé.
CComPtr<IVsToolboxDataProviderRegistry> pTB; if (SUCCEEDED (hr = pServiceProvider->QueryService(SID_SVsToolboxDataProviderRegistry, IID_IVsToolboxDataProviderRegistry, (PVOID*)&pTB)) && pTB != NULL) { CustToolboxDataProvider* pDP = new CustToolboxDataProvider; if (pDP) { pDP->AddRef(); VSCOOKIE dwDPCookie; //UNDONE: pass NULL instead of ptr to the cookie when RegisterDataProvider allows it. pTB->RegisterDataProvider((IVsToolboxDataProvider*)pDP, &dwDPCookie); pDP->Release(); } else { hr = E_OUTOFMEMORY; } }
Pour obtenir une liste de formats de presse-papiers standard de Visual Studioboîte à outils , consultez Boîte à outils (kit de développement Visual Studio SDK).
Voir aussi
Tâches
Développement avancées de contrôle de la boîte à outils
Comment : contrôler la boîte à outils
Concepts
Stocker des fonctionnalités de prise en charge de la boîte à outils