Элементы управления ActiveX в MFC. Добавление пользовательских свойств
Пользовательские свойства отличаются от свойств акций в том, что пользовательские свойства еще не реализованы классом COleControl
. Настраиваемое свойство используется для предоставления определенного состояния или внешнего вида элемента activeX программисту с помощью элемента управления.
В этой статье описывается, как добавить пользовательское свойство в элемент activeX с помощью мастера добавления свойств и объяснить результирующий код изменений. Разделы включают:
Добавление пользовательского свойства с помощью мастера добавления свойств
Добавление изменений мастера свойств для пользовательских свойств
Пользовательские свойства доступны в четырех вариантах реализации: переменная-член, переменная члена с уведомлением, методами get/set и параметризованными.
Реализация переменной члена
Эта реализация представляет состояние свойства как переменную-член в классе управления. Используйте реализацию переменной члена, если не важно знать, когда значение свойства изменяется. Из трех типов эта реализация создает наименьший объем кода поддержки для свойства. Макрос записи карты отправки для реализации переменной-члена DISP_PROPERTY.
Переменная члена с реализацией уведомлений
Эта реализация состоит из переменной-члена и функции уведомлений, созданной мастером добавления свойств. Функция уведомления автоматически вызывается платформой после изменения значения свойства. Используйте переменную-член с реализацией уведомления, когда необходимо получать уведомления после изменения значения свойства. Для реализации требуется больше времени, так как требуется вызов функции. Макрос записи карты отправки для этой реализации DISP_PROPERTY_NOTIFY.
Реализация методов Get/Set
Эта реализация состоит из пары функций-членов в классе элементов. Реализация методов Get/Set автоматически вызывает функцию Get-член, когда пользователь элемента управления запрашивает текущее значение свойства и функцию Set-члена при запросе пользователем элемента управления, что свойство будет изменено. Используйте эту реализацию, если необходимо вычислить значение свойства во время выполнения, проверить значение, переданное пользователем элемента управления перед изменением фактического свойства, или реализовать тип свойства только для чтения или записи. Макрос записи карты отправки для этой реализации DISP_PROPERTY_EX. В следующем разделе с помощью мастера добавления свойств для добавления настраиваемого свойства используется настраиваемое свойство CircleOffset для демонстрации этой реализации.
Параметризованная реализация
Параметризованная реализация поддерживается мастером добавления свойств. Параметризованное свойство (иногда называемое массивом свойств) можно использовать для доступа к набору значений через одно свойство элемента управления. Макрос записи карты отправки для этой реализации DISP_PROPERTY_PARAM. Дополнительные сведения о реализации этого типа см . в разделе "Реализация параметризованного свойства " статьи ActiveX Controls: Advanced Topics.
Использование мастера добавления свойств для добавления настраиваемого свойства
В следующей процедуре показано добавление настраиваемого свойства CircleOffset, которое использует реализацию методов Get/Set. Настраиваемое свойство CircleOffset позволяет пользователю элемента управления смещать круг из центра ограничивающего прямоугольника элемента управления. Процедура добавления настраиваемых свойств с реализацией, отличной от метода Get/Set, очень похожа.
Эта же процедура также может использоваться для добавления других настраиваемых свойств, которые вы хотите. Замените имя пользовательского свойства именем и параметрами свойства CircleOffset.
Добавление настраиваемого свойства CircleOffset с помощью мастера добавления свойств
Загрузите проект элемента управления.
В представлении класса разверните узел библиотеки элемента управления.
Щелкните правой кнопкой мыши узел интерфейса для элемента управления (второй узел узла библиотеки), чтобы открыть контекстное меню.
В контекстном меню выберите команду Добавить, а затем — Добавить свойство.
Откроется мастер добавления свойств.
В поле "Имя свойства" введите CircleOffset.
В поле Тип реализациивыберите Методы Get/Set.
В поле "Тип свойства" выберите
short
.Введите уникальные имена для функций Get и Set или примите имена по умолчанию.
Нажмите кнопку Готово.
Добавление изменений мастера свойств для настраиваемых свойств
При добавлении настраиваемого свойства CircleOffset мастер добавления свойств вносит изменения в заголовок (. H) и реализация (. CPP) файлы класса элемента управления.
В нее добавляются следующие строки. H-файл для объявления двух функций, которые вызываются GetCircleOffset
и SetCircleOffset
:
SHORT GetCircleOffset(void);
void SetCircleOffset(SHORT newVal);
Следующая строка добавляется в элемент управления. IDL-файл:
[id(2), helpstring("property CircleOffset")] SHORT CircleOffset;
[id(3), helpstring("property MyProperty")] SHORT MyProperty;
Эта строка назначает свойство CircleOffset определенному идентификатору, полученному из позиции метода в списке методов и свойств мастера добавления свойств.
Кроме того, в схему отправки добавляется следующая строка (в . CPP-файл класса элемента управления) для сопоставления свойства CircleOffset с двумя функциями обработчика элемента управления:
DISP_PROPERTY_EX_ID(CMyAxUICtrl, "CircleOffset", dispidCircleOffset, GetCircleOffset, SetCircleOffset, VT_I2)
Наконец, реализации GetCircleOffset
функций добавляются SetCircleOffset
в конец элемента управления. CPP-файл. В большинстве случаев вы измените функцию Get, чтобы вернуть значение свойства. Функция Set обычно содержит код, который должен выполняться либо до, либо после изменения свойства.
void CMyAxUICtrl::SetCircleOffset(SHORT /*newVal*/)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: Add your property handler code here
SetModifiedFlag();
}
Обратите внимание, что мастер добавления свойств автоматически добавляет вызов в SetModifiedFlag в текст функции Set. Вызов этой функции помечает элемент управления как измененный. Если элемент управления был изменен, его новое состояние будет сохранено при сохранении контейнера. Эта функция должна вызываться всякий раз, когда свойство сохраняется в рамках постоянного состояния элемента управления, изменяется значение.
См. также
Элементы ActiveX библиотеки MFC
Элементы ActiveX в MFC. Свойства
Элементы ActiveX в MFC. Методы
Класс COleControl