Interface utilisateur des propriétés du projet
Un sous-type de projet peut utiliser les éléments de la boîte de dialogue Pages de propriétés du projet, car ils sont fournis par le projet de base, masquer ou rendre des contrôles en lecture seule et des pages entières comme fournis, ou ajouter des pages spécifiques au sous-type de projet dans la boîte de dialogue Pages de propriétés.
Extension de la boîte de dialogue Propriétés du projet
Un sous-type de projet implémente des extendeurs d’automatisation et la configuration du projet parcourent les objets. Ces extendeurs implémentent l’interface IFilterProperties pour rendre des propriétés particulières masquées ou en lecture seule. La boîte de dialogue Pages de propriétés du projet de base, implémentée par le projet de base, respecte le filtrage effectué par les extendeurs Automation.
Le processus d’extension d’une boîte de dialogue Propriété de projet est décrit ci-dessous :
Le projet de base récupère les extendeurs du sous-type de projet en implémentant l’interface IInternalExtenderProvider . La navigation, l’automatisation du projet et la configuration du projet parcourent les objets du projet de base implémentent toutes cette interface.
Implémentation de IInternalExtenderProvider l’objet de recherche du projet et du délégué de l’objet d’automatisation du projet à l’implémentation IInternalExtenderProvider de l’agrégateur de sous-types de projet (autrement dit, ils concernent
QueryInterface
IInternalExtenderProvider l’objet IVsHierarchy projet).L’objet parcourir la configuration du projet de base implémente IInternalExtenderProvider également la liaison directe dans l’extendeur Automation à partir de l’objet de configuration de sous-type de projet. Son implémentation délègue à l’interface IInternalExtenderProvider implémentée par l’agrégateur de sous-types de projet.
GetProjectItem, implémenté par l’objet parcourir la configuration du projet, retourne l’objet IVsHierarchy .
GetCfg, également implémenté par l’objet parcourir la configuration du projet, retourne l’objet IVsCfg .
Un sous-type de projet peut déterminer les CATID appropriés pour les différents objets extensibles du projet de base au moment de l’exécution en récupérant les valeurs suivantes __VSHPROPID2 :
Pour déterminer les CATID pour l’étendue du projet, le sous-type de projet récupère les propriétés ci-dessus pour VSITEMID. Racine à partir du VSITEMID typedef
. Un sous-type de projet peut également vouloir contrôler les pages de boîte de dialogue Pages de propriétés affichées pour le projet, à la fois dépendantes de la configuration et indépendantes de la configuration. Certains sous-types de projet peuvent avoir besoin de supprimer des pages intégrées et d’ajouter des pages spécifiques au sous-type de projet. Pour l’activer, le projet client géré appelle la GetProperty méthode pour les propriétés suivantes :
VSHPROPID_PropertyPagesCLSIDList
— liste délimitée par des points-virgules des CLSID des pages de propriétés indépendantes de la configuration.VSHPROPID_CfgPropertyPagesCLSIDList —
une liste délimitée par des points-virgules des CLSID des pages de propriétés dépendantes de la configuration.
Étant donné que le sous-type de projet agrège l’objet IVsHierarchy , il peut remplacer la définition de ces propriétés pour contrôler les boîtes de dialogue Pages de propriétés affichées. Le sous-type de projet peut récupérer ces propriétés à partir du projet de base interne, puis ajouter ou supprimer des CLSID si nécessaire.
Les nouvelles pages de propriétés ajoutées par un sous-type de projet sont transmises à un objet de navigation de configuration de projet à partir de l’implémentation du projet de base. Cet objet de navigation de configuration de projet prend en charge les extendeurs Automation. Pour plus d’informations sur AutomationExtenders, consultez Implémentation et utilisation des extendeurs Automation. Les pages de propriétés implémentées par l’appel Extender[] de sous-type de projet pour récupérer leur propre objet de navigation de sous-type de projet qui étend l’objet de navigation de configuration du projet de base.