IPolyCtl - это интерфейс, который содержит методы и свойства. Самый простой способ добавить свойство к этому интерфейсу заключается в выборе меню Add Property из ClassView.

Появляется диалоговое окно Add Property to Interface, которое позволяет ввести информацию о добавляемых свойствах.

Программа MIDL (которая компилирует .idl файлы) определит метод Get, который возвращает свойство и метод Put, который устанавливает свойство. Когда MIDL компилирует файл она автоматически определяет два метода в интерфейсе put_ и get_ от имени свойства.
Наряду с добавлением необходимых строк к .idl файлу, Add Property to Interface также добавляет прототипы функций Get и Put к описанию класса в PolyCtl.h и добавляет пустую реализацию к PolyCtl.cpp.
Чтобы устанавливать и получать свойство нужно определить место для его хранения. Из FileView откройте PolyCtl.h и добавьте следующую строку в конце описания класса после
m_clrFillColor is defined: short m_nSides;
Теперь Вы можете выполнять методы Get и Put. Будут добавлены функции get_Sides и put_Sides в файл PolyCtl.h. Вы должны добавить код в PolyCtl.cpp:
STDMETHODIMP CPolyCtl::get_Sides(short *pVal)
{
*pVal = m_nSides;
return S_OK;
}
STDMETHODIMP CPolyCtl::put_Sides(short newVal)
{
if (newVal > 2 && 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 в допустимое значение. Нужно более 2-х сторон, чтобы можно было изобразить многоугольник, далее можно сделать ограничение по максимуму, к примеру 100 - вполне приемлемое ограничение для максимума. Если будет передано недопустимое значение, то будет использоваться ATL Error для установки подробностей об ошибке в интерфейсе IErrorInfo. Это полезно, если ваш контейнер нуждается в более подробной информации об ошибке, чем возвращается в HRESULT.
Последняя вещь, которую надо сделать для свойства - это инициализация m_nSides. Решим, что треугольник является заданной по умолчанию формой. Добавим строку в конструктор PolyCtl.h:
CPolyCtl()
{
m_nSides = 3;
}
Теперь у нас есть полная реализация свойства Sides.