Элементы ActiveX в MFC. Использование изображений в элементе ActiveX
В этой статье описан общий тип Picture и способ его реализации в пользовательском элементе управления ActiveX. Разделы включают:
Общие сведения о настраиваемых свойствах изображения
Тип Picture — это один из группы общих типов для некоторых элементов управления ActiveX. Тип Picture предназначен для работы с метафайлами, растровыми изображениями или значками и позволяет пользователю выбрать изображение для показа в элементе управления ActiveX. Настраиваемые свойства изображения реализуются с использованием объекта изображения и функций Get и Set, обеспечивающих доступ пользователя к свойству изображения. Управление доступом пользователей к свойству изображения осуществляется с помощью стандартной страницы свойств изображений.
Кроме стандартного типа Picture также доступны типы Font и Color. Дополнительные сведения об использовании стандартного типа Font в элементе управления ActiveX см. в статье Элементы управления MFC ActiveX: использование шрифтов.
Классы элементов управления ActiveX предоставляют несколько компонентов, которые можно использовать для реализации свойства изображения в элементе управления. Сюда входят следующие компоненты.
Класс CPictureHolder .
Этот класс предоставляет простой доступ к объекту изображения и функциям для элемента, отображаемого настраиваемым свойством изображения.
Поддержка свойств типа LPPICTUREDISP, реализованных с помощью функций Get и Set.
С помощью представления класса вы можете быстро добавить поддерживающее тип Picture настраиваемое свойство или несколько. Дополнительные сведения о добавлении свойств элемента управления ActiveX в представлении класса см. в статье Элементы управления MFC ActiveX: свойства.
Страница свойств, которая управляет свойством или свойствами изображения элемента управления.
Эта страница свойств является частью группы запасных страниц свойств, доступных для элементов управления ActiveX. Дополнительные сведения о страницах свойств элементов управления ActiveX см. в статье Элементы управления MFC ActiveX: использование запасных страниц свойств
Реализация настраиваемого свойства изображения в элементе управления ActiveX
После завершения шагов, перечисленных в этом разделе, элемент управления может отображать изображения, выбранные пользователем. Пользователь может изменить отображающееся изображение на странице свойств с текущим изображением и кнопкой "Обзор", которая позволяет пользователю выбирать другие изображения.
Настраиваемое свойство изображения реализуется с использованием процесса, аналогичного тому, который использовался для реализации других свойств. Основное отличие состоит в том, что настраиваемое свойство должно поддерживать тип Picture. Так как элемент свойства изображения должен отрисовываться элементом управления ActiveX, перед его полной реализацией необходимо внести в свойство ряд дополнений и изменений.
Для реализации настраиваемого свойства изображения необходимо сделать следующее.
Добавление кода в проект элемента управления.
Необходимо добавить стандартный идентификатор страницы свойств изображения, член данных типа
CPictureHolder
и настраиваемое свойство типа LPPICTUREDISP с реализацией функций Get и Set.Изменение нескольких функций в классе элемента управления.
Эти изменения будут внесены в нескольких функциях, ответственных за отрисовку элемента управления ActiveX .
Дополнения к проекту элемента управления
Чтобы добавить идентификатор страницы свойств для стандартной страницы свойств Picture, вставьте следующую строку после макроса BEGIN_PROPPAGEIDS в файл реализации элемента управления (). CPP):
PROPPAGEID(CLSID_CPicturePropPage)
Необходимо также увеличить параметр счетчика макроса BEGIN_PROPPAGEIDS по одному. Это показано в следующей строке:
BEGIN_PROPPAGEIDS(CMyAxPicCtrl, 2)
Чтобы добавить член данных CPictureHolder
в класс элемента управления, вставьте следующую строку в защищенный раздел объявления класса элемента управления в файле заголовка (.H) элемента управления:
CPictureHolder m_pic;
Не обязательно назовите элемент данных m_pic; любое имя будет достаточно.
Далее добавьте настраиваемое свойство, которое поддерживает тип Picture.
Добавление настраиваемого свойства изображения с помощью мастера добавления свойств
Загрузите проект элемента управления.
В представлении класса разверните узел библиотеки элемента управления.
Щелкните правой кнопкой мыши узел интерфейса для элемента управления (второй узел узла библиотеки), чтобы открыть контекстное меню.
В контекстном меню выберите команду Добавить , а затем — Добавить свойство.
В поле Имя свойства введите имя свойства. В качестве примера в этой процедуре используется
ControlPicture
.В поле "Тип свойства" выберите IPictureDisp* для типа свойства.
В поле Тип реализациивыберите Методы Get/Set.
Введите уникальные имена для функций Get и Set или примите имена по умолчанию. (В этом примере используются имена по умолчанию:
GetControlPicture
иSetControlPicture
.)Нажмите кнопку Готово.
Мастер добавления свойств добавляет следующий код между комментариями диспетчерской карты в файле заголовка (.H) элемента управления:
IPictureDisp* GetControlPicture(void);
void SetControlPicture(IPictureDisp* pVal);
Кроме того, в диспетчерскую карту CPP-файла реализации (.CPP) элемента управления был вставлен следующий код:
DISP_PROPERTY_EX_ID(CMyAxPicCtrl, "ControlPicture", dispidControlPicture,
GetControlPicture, SetControlPicture, VT_PICTURE)
Мастер добавления свойств также добавляет следующие две функции-заглушки в файл реализации элемента управления:
IPictureDisp* CWizardGenCtrl::GetControlPicture(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: Add your dispatch handler code here
return NULL;
}
void CWizardGenCtrl::SetControlPicture(IPictureDisp* /*pVal*/)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: Add your property handler code here
SetModifiedFlag();
}
Примечание.
Имена класса и функций вашего элемента управления могут отличаться от примера выше.
Модификации проекта элемента управления
После внесения необходимых дополнений в проект элемента управления необходимо изменить несколько функций, которые влияют на отрисовку элемента управления ActiveX. Эти функции, OnResetState
и OnDraw
, а также функции Get и Set настраиваемого свойства изображения расположены в файле реализации элемента управления. (Обратите внимание, что в этом примере вызывается CSampleCtrl
класс управления, CPictureHolder
элемент данных называется m_pic, а имя пользовательского свойства рисунка — ControlPicture
.)
В функцию OnResetState
элемента управления добавьте следующую необязательную строку после вызова COleControl::OnResetState
:
m_pic.CreateEmpty();
m_pic.CreateEmpty();
Это приведет к тому, что будет задано пустое изображение элемента управления.
Чтобы правильно нарисовать изображение, вызовите метод CPictureHolder::Render в функции OnDraw
элемента управления. Измените функцию в соответствии со следующим примером:
void CMyAxPicCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& /*rcInvalid*/)
{
if (!pdc)
return;
m_pic.Render(pdc, rcBounds, rcBounds);
}
В функцию Get настраиваемого свойства изображения элемента управления добавьте следующую строку:
return m_pic.GetPictureDispatch();
return m_pic.GetPictureDispatch();
В функцию Set настраиваемого свойства изображения элемента управления добавьте следующие строки:
m_pic.SetPictureDispatch(pVal);
InvalidateControl();
Свойство изображения должно быть сохраняемым, чтобы добавляемые во время разработки сведения отображались во время выполнения. Добавьте следующую строку в функцию COleControl
класса, производного от DoPropExchange
:
PX_Picture(pPX, _T("ControlPicture"), m_pic);
Примечание.
Имена ваших класса и функции могут отличаться от примера выше.
После внесения изменений выполните повторную сборку проекта, чтобы внедрить новые функции настраиваемого свойства изображения и использовать Контейнер для тестирования нового свойства. Сведения о том, как получить доступ к Контейнеру для тестирования, см. в разделе Тестирование свойств и событий в Контейнере для тестирования .
См. также
Элементы ActiveX библиотеки MFC
Элементы ActiveX в MFC. Использование шрифтов
Элементы ActiveX в MFC. Страницы свойств