Categorización por funcionalidades de contenedor

Los componentes a menudo requieren cierta funcionalidad del contenedor y no funcionarán con un contenedor que no proporcione la compatibilidad. La interfaz de usuario debe filtrar los componentes que requieren funcionalidad que el contenedor no admite. Para ello, los componentes se pueden clasificar por la funcionalidad de contenedor necesaria.

Un ejemplo de componentes que requieren funcionalidad del contenedor y que no funcionan en contenedores que no admiten esa funcionalidad son controles OLE de marco simples. La clasificación por funcionalidades de contenedor se realiza mediante una clave del Registro adicional dentro de la clave CLSID del componente:

;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...}
 

Como se muestra en este ejemplo, un componente puede pertenecer a categorías de componentes que indican la funcionalidad admitida, así como a las categorías de componentes que indican la funcionalidad necesaria.

En el ejemplo siguiente, el control de botón es un control OLE genérico que no admite ninguna funcionalidad adicional. Funcionará en cualquier contenedor de controles OLE.

HKEY_CLASSES_ROOT\CLSID\{...CLSID_Button...}\Implemented Categories
HKEY_CLASSES_ROOT\CLSID\{...CLSID_Button...}\Implemented Categories\{...CATID_Control...}
 

Compare el ejemplo anterior con el siguiente ejemplo en el que MyDBControl puede usar el enlace de datos de Visual Basic si el contenedor lo admite. Sin embargo, se ha definido para que funcione en contenedores que no admiten el enlace de datos de Visual Basic (quizás por otra API de base de datos):

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

El control GroupBox es un control de marco simple. Se basa en el contenedor que implementa la interfaz ISimpleFrameSite y solo funcionará correctamente en estos contenedores:

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 contenedor que admita controles enlazados a datos de Visual Basic, pero no admite controles de marco simples, especificaría CATID_Control y CATID_VBDatabound a la interfaz de usuario de inserción del control. La lista de controles que se muestran al usuario contendrá los CLSID_Button y CLSID_MyDBControl. CLSID_GroupBox no se mostrará.

Asociación de iconos con una categoría

Categorización por funcionalidades de componente

Clases y asociaciones predeterminadas

Definición de categorías de componentes

Administrador de categorías de componentes