Мы с Вами ранее посмотрели как можно создавать свойства вместе с создание элементом управления. Но сделать это можно и позже если Выбрать AddProperty():
Появится окошко настройки свойств:
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. Устанавливаем новое свойство.
Нажимаем применить и цвет изменится. Вообщем-то пример надуманный, потому что цвет текста есть в стандартных свойствах. Но зато принцип понятен, как свои свойства добавлять.