Поделиться через


Классификация по возможностям контейнера

Компоненты часто требуют определенных функциональных возможностей из контейнера и не будут работать с контейнером, который не предоставляет поддержку. Пользовательский интерфейс должен отфильтровать компоненты, требующие функциональных возможностей, которые контейнер не поддерживает. Для этого компоненты можно классифицировать по необходимым функциям контейнера.

Пример компонентов, требующих функциональных возможностей из контейнера и не работающих в контейнерах, которые не поддерживают эту функцию, являются простыми элементами управления OLE кадра. Классификация по возможностям контейнера выполняется дополнительным разделом реестра в разделе CLSID компонента:

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

Как показано в этом примере, компонент может принадлежать категориям компонентов, указывающим поддерживаемые функциональные возможности, а также категории компонентов, указывающие на необходимые функции.

В следующем примере элемент управления кнопкой — это универсальный элемент управления OLE, который не поддерживает дополнительные функциональные возможности. Он будет работать в любом контейнере управления OLE.

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

Сравните предыдущий пример со следующим примером, в котором MyDBControl может использовать привязку данных Visual Basic, если контейнер поддерживает его. Однако он определен таким образом, чтобы он работал в контейнерах, которые не поддерживают привязку данных Visual Basic (возможно, с помощью другого API базы данных):

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

Элемент управления GroupBox — это простой элемент управления кадром. Он использует контейнер, реализуя интерфейс ISimpleFrameSite , и будет работать правильно только в таких контейнерах:

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

Контейнер, поддерживающий элементы управления привязкой данных Visual Basic, но не поддерживает простые элементы управления кадрами, указывает CATID_Control и CATID_VBDatabound в пользовательский интерфейс элемента управления вставки. Список элементов управления, отображаемых пользователю, будет содержать CLSID_Button и CLSID_MyDBControl. CLSID_GroupBox не будет отображаться.

Связывание значков с категорией

Классификация по возможностям компонентов

Классы и связи по умолчанию

Определение категорий компонентов

Диспетчер категорий компонентов