В прошлый раз мы с Вами создали переменную m_string. Только использование этой переменной не настоящее. То есть, переменная должна уметь сохранять своё значение в контейнере и при создании нового элемента должна устанавливать его по умолчанию. У нас она только устанавливается по умолчанию и всё. Ну и рисуется еще.
Открывайте наш проект. Переходите на ClassView. Это так, чтобы видеть. Выбирайте меню View, а потом ClassWizad. Нас интересует вкладка Automation. Выбирите кнопку Add property, что значит добавить свойство. И заполняем как приведено ниже:
Теперь нам необходимо закоментировать нашу переменную m_string:
// Dispatch and event IDs public: //CString m_string;
Так как она создана вот здесь:
// Dispatch maps //{{AFX_DISPATCH(CDMyActive1Ctrl) CString m_string; afx_msg void OnMyTextChanged(); //}}AFX_DISPATCH DECLARE_DISPATCH_MAP()
Если Вы сейчас соберете элемент и попробуете вставить, то ничего не изменится в его функционировании.
Следующее действие - обеспечить объекту живучесть. Объекты не имеют функцию Seliarize(). Надо научить его сохранять данные как часть приложения контейнера и восстанавливать при открытии документа. Это реализуется методом DoPropExchange(). Специальные макросы типа PX_type позволяют организовать этот обмен. Откройте функцию DoPropExchange() и измените код.
void CDMyActive1Ctrl::DoPropExchange(CPropExchange* pPX) { ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor)); COleControl::DoPropExchange(pPX); PX_String(pPX,"MyText",m_string); }
Вот мы и создали настоящее свойство. В следующих шагах мы его протестируем на примере VBA.