Элементы 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, перед его полной реализацией необходимо внести в свойство ряд дополнений и изменений.

Для реализации настраиваемого свойства изображения необходимо сделать следующее.

Дополнения к проекту элемента управления

Чтобы добавить идентификатор страницы свойств для стандартной страницы свойств Picture, вставьте следующую строку после макроса BEGIN_PROPPAGEIDS в файл реализации элемента управления (). CPP):

PROPPAGEID(CLSID_CPicturePropPage)

Необходимо также увеличить параметр счетчика макроса BEGIN_PROPPAGEIDS по одному. Это показано в следующей строке:

BEGIN_PROPPAGEIDS(CMyAxPicCtrl, 2)

Чтобы добавить член данных CPictureHolder в класс элемента управления, вставьте следующую строку в защищенный раздел объявления класса элемента управления в файле заголовка (.H) элемента управления:

CPictureHolder    m_pic;

Не обязательно назовите элемент данных m_pic; любое имя будет достаточно.

Далее добавьте настраиваемое свойство, которое поддерживает тип Picture.

Добавление настраиваемого свойства изображения с помощью мастера добавления свойств

  1. Загрузите проект элемента управления.

  2. В представлении класса разверните узел библиотеки элемента управления.

  3. Щелкните правой кнопкой мыши узел интерфейса для элемента управления (второй узел узла библиотеки), чтобы открыть контекстное меню.

  4. В контекстном меню выберите команду Добавить , а затем — Добавить свойство.

  5. В поле Имя свойства введите имя свойства. В качестве примера в этой процедуре используется ControlPicture .

  6. В поле "Тип свойства" выберите IPictureDisp* для типа свойства.

  7. В поле Тип реализациивыберите Методы Get/Set.

  8. Введите уникальные имена для функций Get и Set или примите имена по умолчанию. (В этом примере используются имена по умолчанию: GetControlPicture и SetControlPicture .)

  9. Нажмите кнопку Готово.

Мастер добавления свойств добавляет следующий код между комментариями диспетчерской карты в файле заголовка (.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. Страницы свойств