Catégorisation par fonctionnalités de conteneur
Les composants nécessitent souvent certaines fonctionnalités du conteneur et ne fonctionnent pas avec un conteneur qui n’assure pas la prise en charge. L’interface utilisateur doit filtrer les composants qui nécessitent des fonctionnalités que le conteneur ne prend pas en charge. Pour ce faire, les composants peuvent être classés selon les fonctionnalités de conteneur requises.
Un exemple de composants qui nécessitent des fonctionnalités du conteneur et qui ne fonctionnent pas dans les conteneurs qui ne prennent pas en charge cette fonctionnalité sont des contrôles OLE de trame simples. La catégorisation par fonctionnalités de conteneur est effectuée par une clé de Registre supplémentaire dans la clé CLSID du composant :
;The CLSID for "Simple Frame Control" is {123456FF-ABCD-4321-0101-00000000000C}HKEY_CASSES_ROOT\CLSID\{12346FF-ABCD-4321-0101-00000000000C}\Implemented Categories
;The CATID for "Control" is {40FC6ED4-2438-11cf-A3DB-080036F12502} HKEY_CLASSES_ROOT\CLSID\{123456FF-ABCD-4321-0101-00000000000C}Implemented Categories\{40FC6ED4-2438-11cf-A3DB-080036F12502}
;The CATID for simple frame controls is {...CATID_SimpleFrameControl...} HKEY_CLASSES_ROOT\CLSID\{123456FF-ABCD-4321-0101-00000000000C}Implemented Categories\{...CATID_SimpleFrameControl...}
HKEY_CLASSES_ROOT\CLSID\{123456FF-ABCD-4321-0101-00000000000C}Required Categories\{...CATID_SimpleFrameControl...}
Comme indiqué dans cet exemple, un composant peut appartenir à des catégories de composants qui indiquent des fonctionnalités prises en charge, ainsi qu’à des catégories de composants qui indiquent les fonctionnalités requises.
Dans l’exemple suivant, le contrôle bouton est un contrôle OLE générique qui ne prend en charge aucune fonctionnalité supplémentaire. Il fonctionne dans n’importe quel conteneur de contrôle OLE.
HKEY_CLASSES_ROOT\CLSID\{...CLSID_Button...}\Implemented Categories
HKEY_CLASSES_ROOT\CLSID\{...CLSID_Button...}\Implemented Categories\{...CATID_Control...}
Comparez l’exemple précédent avec l’exemple suivant dans lequel MyDBControl peut utiliser la liaison de données Visual Basic si le conteneur la prend en charge. Toutefois, il a été défini de sorte qu’il fonctionne dans des conteneurs qui ne prennent pas en charge la liaison de données Visual Basic (peut-être par une autre API de base de données) :
HKEY_CLASSES_ROOT\CLSID\{...CLSID_MyDBControl...}\Implemented Categories
HKEY_CLASSES_ROOT\CLSID\{...CLSID_MyDBControl...}\Implemented Categories\{...CATID_Control...}
HKEY_CLASSES_ROOT\CLSID\{...CLSID_MyDBControl...}\Implemented Categories\{...CATID_VBDatabound...}
Le contrôle GroupBox est un contrôle frame simple. Il s’appuie sur le conteneur qui implémente l’interface ISimpleFrameSite et fonctionne correctement uniquement dans ces conteneurs :
HKEY_CLASSES_ROOT\CLSID\{...CLSID_GroupBox...}\Implemented Categories
HKEY_CLASSES_ROOT\CLSID\{...CLSID_GroupBox...}\Implemented Categories\{...CATID_Control...}
HKEY_CLASSES_ROOT\CLSID\{...CLSID_GroupBox...}\Implemented Categories\{...CATID_SimpleFrame...}
HKEY_CLASSES_ROOT\CLSID\{...CLSID_GroupBox...}\Required Categories\{...CATID_SimpleFrame...}
Un conteneur qui prend en charge les contrôles liés aux données Visual Basic, mais qui ne prend pas en charge les contrôles frame simples, spécifie CATID_Control et CATID_VBDatabound à l’interface utilisateur du contrôle d’insertion. La liste des contrôles affichés à l’utilisateur contient les CLSID_Button et CLSID_MyDBControl. CLSID_GroupBox ne s’affiche pas.
Rubriques connexes