Добавление свойства в элемент управления (учебник ATL, часть 3)
IPolyCtl
— это интерфейс, содержащий пользовательские методы и свойства элемента управления, и вы добавите в него свойство.
Добавление определений свойств в проект
В представлении
Polygon
классов разверните ветвь.Щелкните правой кнопкой мыши
IPolyCtl
.В контекстном меню нажмите кнопку "Добавить" и нажмите кнопку "Добавить свойство". Откроется мастер добавления свойств.
Введите
Sides
имя свойства.В раскрывающемся списке типа свойства выберите
short
.Нажмите кнопку "ОК" , чтобы завершить добавление свойства.
В Обозреватель решений откройте Polygon.idl и замените следующие строки в конце
IPolyCtl : IDispatch
интерфейса:short get_Sides(); void set_Sides(short value);
на
[propget, id(1), helpstring("property Sides")] HRESULT Sides([out, retval] short *pVal); [propput, id(1), helpstring("property Sides")] HRESULT Sides([in] short newVal);
В Обозреватель решений откройте PolyCtl.h и добавьте следующие строки после определения
m_clrFillColor
:short m_nSides; STDMETHOD(get_Sides)(short* pval); STDMETHOD(put_Sides)(short newval);
Хотя теперь у вас есть скелетные функции для задания и извлечения свойства и переменной для хранения свойства, необходимо соответствующим образом реализовать функции.
Обновление методов get и put
Задайте значение
m_nSides
по умолчанию . Сделайте фигуру по умолчанию треугольником, добавив строку в конструктор в PolyCtl.h:m_nSides = 3;
Реализуйте методы
Get
иPut
.put_Sides
Объявленияget_Sides
функций добавлены в PolyCtl.h. Теперь добавьте код дляget_Sides
PolyCtl.cppput_Sides
следующим образом:STDMETHODIMP CPolyCtl::get_Sides(short* pVal) { *pVal = m_nSides; return S_OK; } STDMETHODIMP CPolyCtl::put_Sides(short newVal) { if (2 < newVal && newVal < 101) { m_nSides = newVal; return S_OK; } else { return Error(_T("Shape must have between 3 and 100 sides")); } }
Метод get_Sides
возвращает текущее значение Sides
свойства через pVal
указатель. В методе put_Sides
код гарантирует, что пользователь устанавливает Sides
свойство в допустимое значение. Минимальное значение должно быть 3, и поскольку массив точек будет использоваться для каждой стороны, 100 является разумным ограничением для максимального значения.
Теперь у вас есть свойство Sides
. На следующем шаге вы измените код рисования на его использование.