Sdílet prostřednictvím


MFC – ovládací prvky ActiveX: Serializace

Tento článek popisuje, jak serializovat ovládací prvek technologie ActiveX. Serializace je proces čtení z nebo zápisu do trvalého úložného média, jako je například diskový soubor. Knihovna MFC (Microsoft Foundation Class) poskytuje integrovanou podporu serializace ve třídě CObject. COleControlrozšiřuje tuto podporu na technologie ActiveX ovládací prvky prostřednictvím mechanismu výměny vlastností.

Důležité

technologie ActiveX je starší technologie, která by se neměla používat pro nový vývoj. Další informace o moderních technologiích, které nahrazují technologie ActiveX, najdete v tématu technologie ActiveX Ovládací prvky.

Serializace pro technologie ActiveX ovládací prvky je implementována přepsáním COleControl::D oPropExchange. Tato funkce, která se volá při načítání a ukládání řídicího objektu, ukládá všechny vlastnosti implementované s členské proměnné nebo členské proměnné s oznámením o změně.

Následující témata se týkají hlavních problémů souvisejících se serializací ovládacího prvku technologie ActiveX:

Implementace funkce DoPropExchange

Pokud použijete průvodce technologie ActiveX Ovládací prvek vygenerování projektu řízení, několik výchozích obslužných funkcí se automaticky přidá do třídy ovládacího prvku, včetně výchozí implementace COleControl::D oPropExchange. Následující příklad ukazuje kód přidaný do tříd vytvořených pomocí průvodce technologie ActiveX řízení:

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

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

Pokud chcete vytvořit trvalou vlastnost, upravte DoPropExchange ji přidáním volání do funkce výměny vlastností. Následující příklad ukazuje serializace vlastní Boolean CircleShape vlastnost, kde CircleShape vlastnost má výchozí hodnotu PRAVDA:

void CMyAxSerCtrl::DoPropExchange(CPropExchange* pPX)
{
   ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
   COleControl::DoPropExchange(pPX);
PX_Bool(pPX, _T("CircleShape"), m_bCircleShape, TRUE);
}

Následující tabulka uvádí možné funkce výměny vlastností, které můžete použít k serializaci vlastností ovládacího prvku:

Funkce výměny vlastností Purpose
PX_Blob( ) Serializuje typ Binary Large Object (BLOB) datové vlastnosti.
PX_Bool( ) Serializuje typ Boolean vlastnost.
PX_Color( ) Serializuje vlastnost barvy typu.
PX_Currency( ) Serializuje typ CY (měna) vlastnost.
PX_Double( ) Serializuje vlastnost typu double .
PX_Font( ) Serializuje vlastnost Typ písma.
PX_Float( ) Serializuje vlastnost typu float .
PX_IUnknown( ) Serializuje vlastnost typu LPUNKNOWN.
PX_Long( ) Serializuje vlastnost typu long .
PX_Picture( ) Serializuje typ Picture vlastnost.
PX_Short( ) Serializuje vlastnost typu short .
PXstring( ) Serializuje vlastnost typu CString .
PX_ULong( ) Serializuje typ ULONG vlastnost.
PX_UShort( ) Serializuje typ USHORT vlastnost.

Další informace o těchto funkcích výměny vlastností naleznete v tématu Trvalost ovládacích prvků OLE v mfc reference.

Přizpůsobení výchozího chování DoPropExchange

Výchozí implementace DoPropertyExchange (jak je znázorněno v předchozím tématu) provádí volání základní třídy COleControl. Tato serializace sady vlastností automaticky podporuje COleControl, který používá více prostoru úložiště než serializace pouze vlastní vlastnosti ovládacího prvku. Odebrání tohoto volání umožňuje objekt serializovat pouze ty vlastnosti, které považujete za důležité. Všechny stavy akcií, které ovládací prvek implementoval, nebudou serializovány při ukládání nebo načítání řídicího objektu, pokud explicitně nepřidáte PX_ volání pro ně.

Implementace podpory verzí

Podpora verzí umožňuje revidovanému ovládacímu prvku technologie ActiveX přidat nové trvalé vlastnosti a stále dokáže rozpoznat a načíst trvalý stav vytvořený starší verzí ovládacího prvku. Chcete-li zpřístupnit verzi ovládacího prvku jako součást trvalých dat, volejte COleControl::ExchangeVersion ve funkci ovládacího prvku DoPropExchange . Toto volání se automaticky vloží, pokud byl ovládací prvek technologie ActiveX vytvořen pomocí Průvodce ovládacím technologie ActiveX. Pokud podpora verzí není nutná, je možné ji odebrat. Náklady na velikost ovládacího prvku jsou ale velmi malé (4 bajty) pro přidanou flexibilitu, kterou poskytuje podpora verzí.

Pokud ovládací prvek nebyl vytvořen pomocí průvodce technologie ActiveX ovládací prvek, přidejte volání COleControl::ExchangeVersion vložením následujícího řádku na začátek funkce DoPropExchange (před voláním COleControl::DoPropExchange):

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

Jako číslo verze můžete použít libovolný DWORD . Projekty vygenerované průvodcem ovládacími prvky technologie ActiveX používají _wVerMinor a _wVerMajor jako výchozí. Jedná se o globální konstanty definované v souboru implementace technologie ActiveX třídy řízení projektu. Ve zbývající části funkce DoPropExchange můžete kdykoli zavolat CPropExchange::GetVersion a načíst verzi, kterou ukládáte nebo načítáte.

V následujícím příkladu má verze 1 tohoto ukázkového ovládacího prvku pouze vlastnost ReleaseDate. Verze 2 přidá vlastnost OriginalDate. Pokud má ovládací prvek pokyn k načtení trvalého stavu ze staré verze, inicializuje proměnnou člena pro novou vlastnost na výchozí hodnotu.

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;
   }
}

Ve výchozím nastavení ovládací prvek převede stará data do nejnovějšího formátu. Pokud například verze 2 ovládacího prvku načte data uložená ve verzi 1, zapíše se při dalším uložení do formátu verze 2. Pokud chcete, aby ovládací prvek ukládal data ve formátu posledního čtení, při volání ExchangeVersionpředejte hodnotu FALSE jako třetí parametr . Tento třetí parametr je volitelný a ve výchozím nastavení má hodnotu TRUE .

Viz také

MFC – ovládací prvky ActiveX