Поделиться через


Элементы управления ActiveX в MFC. Сериализация

Этот раздел описывает, как выполнить сериализацию элементов управления ActiveX. Сериализация представляет собой процесс из чтения или записи в постоянное носителю записи, например дисковый файл. Библиотеки Microsoft Foundation Class (MFC) предоставляет встроенную поддержку сериализации в классе CObject. COleControl передает эта поддержка с элементами управления ActiveX с помощью механизма обмена свойства.

Сериализация для элементов управления ActiveX реализуется путем переопределения COleControl::DoPropExchange. Эта функция, вызываемая во время загрузки и сохранения объекта управления, содержит все свойства, реализованные с переменной-членом или переменной-членом с уведомления об изменении.

В следующих разделах приведены сведения о связанных основных проблем в сериализации элемента управления ActiveX.

  • Реализации функций DoPropExchange для сериализации находится объект управления

  • Настраивать процесс сериализации

  • Реализация поддержки версии

Реализации функций DoPropExchange

При использовании мастера элементов управления ActiveX для создания проекта элемента управления, несколько функций обработчика по умолчанию автоматически добавляются в класс элемента управления, включая реализацию по умолчанию COleControl::DoPropExchange. В следующем примере показан код добавлен к классам, созданным с помощью элемента управления ActiveX.

void CMyAxUICtrl::DoPropExchange(CPropExchange* pPX)
{
   ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
   COleControl::DoPropExchange(pPX);

   // TODO: Call PX_ functions for each persistent custom property.
}

Если требуется создать свойство упорным, измените DoPropExchange путем добавления вызов функции обмена свойства. В следующем примере демонстрируется сериализации пользовательского свойства логического CircleShape, где свойство CircleShape имеет значение по умолчанию TRUE.

void CMyAxSerCtrl::DoPropExchange(CPropExchange* pPX)
{
    ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
    COleControl::DoPropExchange(pPX);


...


   PX_Bool(pPX, _T("CircleShape"), m_bCircleShape, TRUE);
}

В следующей таблице перечислены возможные обмена функции свойств можно использовать для сериализации свойства элемента управления.

Функции обмена свойства

Назначение

PX_Blob ()

Сериализует свойства данных (BLOB) большого двоичного объекта типа.

PX_Bool ()

Сериализует логическое свойство типа.

PX_Color ()

Сериализует свойства типа цвета.

PX_Currency ()

Сериализует свойства типа валюты ( CY ).

PX_Double ()

Сериализует свойства типа double.

PX_Font ()

Сериализует свойства типа шрифта.

PX_Float ()

Сериализует свойства типа плавающее.

PX_IUnknown ()

Сериализует свойства типа LPUNKNOWN.

PX_Long ()

Сериализует свойства типа long.

PX_Picture ()

Сериализует свойство фигуры типа.

PX_Short ()

Сериализует свойства типа short.

PX_String ()

Сериализует свойство CString типа.

PX_ULong ()

Сериализует свойства типа ulong.

PX_UShort ()

Сериализует свойства типа ushort.

Дополнительные сведения об этих функциях обмена свойств см. в разделе Сохранение элементов управления OLE в справочнике по MFC.

Настраивать реакция на событие по умолчанию DoPropExchange

Реализация по умолчанию DoPropertyExchange (как показано в предыдущем разделе) вызовет базовый класс COleControl. Это сериализует набор свойств автоматически поддерживается COleControl, который использует больше дискового пространства, чем издающ сериализации только пользовательские свойства элемента управления. Удалить этот вызов позволяет данный объект для сериализации только те свойства, безопасные важным. Любое стандартное свойство заявляет, что не будет сериализуется в элемент управления, реализовал сохранения или загрузка объект управления, если явно не задано добавление вызовов PX_ для них.

Реализация поддержки версии

Поддержка версий позволяет измененного элемента управления ActiveX добавлять новые доступные свойства и по-прежнему может найти и загрузить постоянные, созданный в более ранней версии состояние элемента управления. Чтобы сделать версии элемента управления доступен как часть его упорных данных, вызовите функции COleControl::ExchangeVersion в DoPropExchange элемента управления. Этот вызов автоматически вставляется, если элемент управления ActiveX было создано с помощью мастера элементов управления ActiveX. Его можно удалить, если не нужна поддержка версии. Однако затраты размера элемента управления очень мала (4 байта) для добавленной гибкости, поддержка предоставляет версии.

Если элемент управления не был создан с помощью мастера элементов управления ActiveX, добавьте вызов COleControl::ExchangeVersion, вставив следующей линии в начале функции DoPropExchange (перед вызовом COleControl::DoPropExchange).

void CMyAxSerCtrl::DoPropExchange(CPropExchange* pPX)
{
    ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
    COleControl::DoPropExchange(pPX);


...


}

Можно использовать любое DWORD как номер версии. Проекты, созданные использованием _wVerMinor и _wVerMajor мастера элементов управления ActiveX по умолчанию. Эти глобальные константы, определенные в файле реализации класса элемента управления ActiveX проекта. В пределах остальной функции DoPropExchange, можно вызвать CPropExchange::GetVersion в любое время, чтобы получить версию сохранении или извлечении.

В следующем примере, версия 1 управления этого примера «имеет только свойства ReleaseDate». Версия 2 добавляет свойство «OriginalDate». Если элемент управления проинструктирован для загрузки постоянное состояние из старой версии, он инициализирует переменную-член для нового свойства значение по умолчанию.

void CMyAxSerCtrl::DoPropExchange(CPropExchange* pPX)
{
    ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
    COleControl::DoPropExchange(pPX);

   PX_Long(pPX, _T("ReleaseDate"), m_ReleaseDate);
   if (pPX->GetVersion() >= MAKELONG(0, 2))
   {
      PX_Long(pPX, _T("OriginalDate"), m_OriginalDate);
   }
   else
   {
      if (pPX->IsLoading())
         m_OriginalDate = 0;
   }


...


}

По умолчанию элемент управления «преобразования» старые данные на последний по времени формат. Например, если версия 2 элемента управления загружает данные, сохраненного версия 1, он записывает формат версии 2 при его сохранении снова. Если последним или требуется элемент управления сохранения данных в формате, передайте ЛОЖЬ в качестве третьего параметра при вызове ExchangeVersion. Этот параметр является необязательным и третий TRUE по умолчанию.

См. также

Основные понятия

Элементы управления ActiveX MFC