Шаг 3 - Пользовательские свойства

В прошлый раз мы с Вами создали переменную m_string. Только использование этой переменной не настоящее. То есть, переменная должна уметь сохранять своё значение в контейнере и при создании нового элемента должна устанавливать его по умолчанию. У нас она только устанавливается по умолчанию и всё. Ну и рисуется еще.

Открывайте наш проект. Переходите на ClassView. Это так, чтобы видеть. Выбирайте меню View, а потом ClassWizad. Нас интересует вкладка Automation. Выбирите кнопку Add property, что значит добавить свойство. И заполняем как приведено ниже:

3_1.gif (4910 b)

Теперь нам необходимо закоментировать нашу переменную 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.


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.