ActiveX с нуля

         

Добавление свойства с переменной членом и сообщением об изменении его.


Пусть MyProp – свойство, при изменении которого не нужна специальная обработка контрольного элемента. Тогда для его реализации можно использовать способ, связанный только с переменной-членом класса, и с оповещением об изменении свойства.

Для добавления свойства MyProp необходимо:

1.

Загрузить Ваш проект.

2.      В меню View

выбрать ClassWizard.

3.      Выбрать вкладку Automation.

4.      Выберете имя класса из списка Class name.

5.      Щелкнуть на кнопке Add Property.

6.      В списке External

Name напечатать нужное свойство, например, MyProp.

7.      В группе Implementation

указать Member variable ods.

8.      В списке Type

выбрать тип свойства, например, short.

9.      Проверить, что Notification function содержит OnMyPropChanged, а Variable name – m_myProp.



10.  Щелкнуть на кнопке OK для того, чтобы закрыть диалог Add Property.

Заметьте, что в разделе Implementation появился текст:

short m_myProp;

void OnMyPropChanged();

11.  Щелкнуть на кнопке OK для того, чтобы закрыть диалог ClassWizard.

ClassWizard изменяет код и в файле .H, и в файле .ODL, и в файле .CPP.

Така наше свойство – переменная- член класса, то в файле .H появилась соответствующие строки:

            short m_myProp;

            afx_msg void OnMyPropChanged();

В файле .CPP в карте диспетчеризации добавится макрос:

DISP_PROPERTY_NOTIFY(CMyCtrlCtrl, "MyProp", m_myProp, OnMyPropChanged, VT_I2)

Макрос DISP_PROPERTY_NOTIFY связывает имя свойства MyProp с:

·         Переменной класса M_myProp;

·         Функцией OnMyPropChanged, которая вызывается при изменении свойства;

·         Типом VT_I2, который соответствует нашему свойству.

ClassWizard также добавляет определение функции OnMyPropChanged в файл .CPP:

void CMyCtrlCtrl::OnMyPropChanged()

{

     // TODO: Add notification handler code

     SetModifiedFlag();

}

В файл .ODL добавляется строка, определяющая уникальный идентификатор свойства:

            [id(1)] short MyProp;

Если Вы не хотите использовать нотификационную функцию, то удалите ее имя в мастере.



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