Шаг 102 - Пользовательские свойства после создания ATL проекта

Мы с Вами ранее посмотрели как можно создавать свойства вместе с создание элементом управления. Но сделать это можно и позже если Выбрать AddProperty():

102_1.gif (3375 b)

Появится окошко настройки свойств:

102_2.gif (6758 b)

PropertyType  один из возможных типов
PropertyName  имя свойства
Parametrs     дополнительные параметры если они необходимы при задании свойства
Get - Put     необходиомость генерировать функции установку или получения свойства
PropPutRef    если установить его то свойство будет по ссылке.

В IDL будут добавлены строки:

[propget, id(1), helpstring("property TextColor")] HRESULT TextColor([out, retval] OLE_COLOR *pVal);
[propput, id(1), helpstring("property TextColor")] HRESULT TextColor([in] OLE_COLOR newVal);

И созданы функции члены для установки свойств.

STDMETHODIMP CCAtlContorl::get_TextColor(OLE_COLOR *pVal)
{
	// TODO: Add your implementation code here
	return S_OK;
}

STDMETHODIMP CCAtlContorl::put_TextColor(OLE_COLOR newVal)
{
	// TODO: Add your implementation code here
	return S_OK;
}

Итак давайте попробуем их использовать. Создадим переменную для хранения свойств.

.........
	}
	OLE_COLOR m_clrBackColor;
	OLE_COLOR m_clrBorderColor;
	OLE_COLOR m_clrTextColors;
};

Код для установке и получения

STDMETHODIMP CCAtlContorl::get_TextColor(OLE_COLOR *pVal)
{
	*pVal=m_clrTextColors;
	return S_OK;
}

STDMETHODIMP CCAtlContorl::put_TextColor(OLE_COLOR newVal)
{
	m_clrTextColors=newVal;
	FireViewChange();	
	return S_OK;
}

Меняем код OnDraw.

HRESULT OnDraw(ATL_DRAWINFO& di)
	{
		RECT& rc = *(RECT*)di.prcBounds;
		Rectangle(di.hdcDraw, rc.left, rc.top, rc.right, rc.bottom);
		COLORREF clrText;
		OleTranslateColor(m_clrTextColors, NULL, &clrText);
		SetTextColor(di.hdcDraw,clrText);
		SetTextAlign(di.hdcDraw, TA_CENTER|TA_BASELINE);
		LPCTSTR pszText = _T("ATL 3.0 : CAtlContorl");
		TextOut(di.hdcDraw, 
			(rc.left + rc.right) / 2, 
			(rc.top + rc.bottom) / 2, 
			pszText, 
			lstrlen(pszText));
	
		return S_OK;
	}

Можно собирать и проверять в ActiveX Control Test Container. Устанавливаем новое свойство.

102_3.gif (6784 b)

Нажимаем применить и цвет изменится. Вообщем-то пример надуманный, потому что цвет текста есть в стандартных свойствах. Но зато принцип понятен, как свои свойства добавлять.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 28.08.2001