ActiveX с нуля

         

Доступ к свойствам контейнера.


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

Для доступа к свойствам контейнера можно использовать метод класса COleControl::GetAmbientProperty:

BOOL GetAmbientProperty( DISPID dwDispid, VARTYPE

vtProp, void* pvProp );

 Первый параметр этого метода – идентификатор для свойства контейнера. Стандартные свойства контейнера приводятся в файле OLECTL.H:

#define DISPID_AMBIENT_BACKCOLOR                     (-701)

#define DISPID_AMBIENT_DISPLAYNAME                 (-702)

#define DISPID_AMBIENT_FONT                                                (-703)

#define DISPID_AMBIENT_FORECOLOR                                  (-704)

#define DISPID_AMBIENT_LOCALEID                          (-705)

#define DISPID_AMBIENT_MESSAGEREFLECT          (-706)

#define DISPID_AMBIENT_SCALEUNITS                      (-707)

#define DISPID_AMBIENT_TEXTALIGN                                    (-708)

#define DISPID_AMBIENT_USERMODE                                    (-709)

#define DISPID_AMBIENT_UIDEAD                               (-710)

#define DISPID_AMBIENT_SHOWGRABHANDLES    (-711)



#define DISPID_AMBIENT_SHOWHATCHING             (-712)

#define DISPID_AMBIENT_DISPLAYASDEFAULT      (-713)

#define DISPID_AMBIENT_SUPPORTSMNEMONICS  (-714)

#define DISPID_AMBIENT_AUTOCLIP                           (-715)

#define DISPID_AMBIENT_APPEARANCE                    (-716)

#define DISPID_AMBIENT_CODEPAGE                         (-725)

#define DISPID_AMBIENT_PALETTE                              (-726)

#define DISPID_AMBIENT_CHARSET                             (-727)

#define DISPID_AMBIENT_TRANSFERPRIORITY       (-728)


#define DISPID_AMBIENT_RIGHTTOLEFT                    (-732)

#define DISPID_AMBIENT_TOPTOBOTTOM                 (-733)

Второй параметр функции GetAmbientProperty определяет ожидаемый тип свойства, а третий – адрес, по которому будет записано значение. При успешном выполнении и поддержке свойства контейнером функция возвращает TRUE, в противном случае –FALSE.

Ниже приводится фрагмент кода для получения свойства контейнера UserMode:

BOOL bUserMode;

   if( !GetAmbientProperty( DISPID_AMBIENT_USERMODE,

      VT_BOOL, &bUserMode ) )

      bUserMode = TRUE;

Класс COleControl содержит методы для доступа к часто используемым свойствам контейнера (таблица 5):

Таблица 5. Некоторые функции для получения свойств контейнера.

Функция

Назначение

OLE_COLOR AmbientBackColor()

Возвращает значение фонового цвета окружения.

CString AmbientDisplayName()

Возвращает имя элемента в контейнере.

OLE_COLOR

AmbientForeColor()

Возвращает значение цвета переднего плана окружения.

LPFONTDISP

AmbientFont()

Возвращает значение шрифта окружения.

short AmbientTextAlign()

Возвращает тип тектового выравнивания в контейнере:

0 – обычное выравнивание;

1 – по левому краю;

2 – по центру;

3 – по правому краю.

BOOL AmbientUIDead()

Возвращает, должен ли элемент реагировать на действия пользователя:

не 0 , если элемент должен реагировать на действия пользователя

BOOL

AmbientUserMode()

Возвращает режим контейнера: 0-режим конструирования, не 0 – рабочий режим.

BOOL GetAmbientProperty( DISPID dwDispid, VARTYPE

vtProp, void*

pvProp );

Возвращает значение указанного как параметр свойства окружения.

Если свойство контейнера изменяется, то вызывается функция COleControl::OnAmbientPropertyChanged. Переопределяя эту функцию, Вы можете определить свои действия. Параметр этой функции определяет свойство, которое изменилось.


Содержание раздела