Aracılığıyla paylaş


MFC ActiveX Denetimleri: Seri Hale Getirme

Bu makalede, ActiveX denetiminin nasıl serileştirılacağı açıklanır. Serileştirme, disk dosyası gibi kalıcı bir depolama ortamına okuma veya yazma işlemidir. Microsoft Foundation Sınıf (MFC) Kitaplığı, sınıfında CObjectserileştirme için yerleşik destek sağlar. COleControl bir özellik değişim mekanizması kullanarak bu desteği ActiveX denetimlerine genişletir.

Önemli

ActiveX, yeni geliştirme için kullanılmaması gereken eski bir teknolojidir. ActiveX'in yerine geçen modern teknolojiler hakkında daha fazla bilgi için bkz . ActiveX Denetimleri.

ActiveX denetimleri için serileştirme COleControl::D oPropExchange geçersiz kılınarak uygulanır. Denetim nesnesinin yüklenmesi ve kaydedilmesi sırasında çağrılan bu işlev, bir üye değişkeniyle veya değişiklik bildirimiyle üye değişkeniyle uygulanan tüm özellikleri depolar.

Aşağıdaki konular, ActiveX denetimini seri hale getirmeyle ilgili temel sorunları kapsar:

DoPropExchange İşlevini Uygulama

Denetim projesini oluşturmak için ActiveX Denetim Sihirbazı'nı kullandığınızda, varsayılan COleControl::D oPropExchange uygulaması dahil olmak üzere çeşitli varsayılan işleyici işlevleri otomatik olarak denetim sınıfına eklenir. Aşağıdaki örnekte, ActiveX Denetim Sihirbazı ile oluşturulan sınıflara eklenen kod gösterilmektedir:

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

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

Bir özelliği kalıcı hale getirmek istiyorsanız, özellik değişim işlevine bir çağrı ekleyerek değiştirin DoPropExchange . Aşağıdaki örnekte, CircleShape özelliğinin varsayılan değeri TRUE olan özel bir BooleAn CircleShape özelliğinin seri hale getirilmesi gösterilmektedir:

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

Aşağıdaki tabloda, denetimin özelliklerini seri hale getirmek için kullanabileceğiniz olası özellik değişimi işlevleri listelenmektedir:

Özellik değişim işlevleri Purpose
PX_Blob( ) Bir tür İkili Büyük Nesne (BLOB) veri özelliğini seri hale getirir.
PX_Bool( ) Tür Boole özelliğini serileştirir.
PX_Color( ) Tür rengi özelliğini serileştirir.
PX_Currency( ) Tür CY (para birimi) özelliğini serileştirir.
PX_Double( ) Tür double özelliğini serileştirir.
PX_Font( ) Yazı Tipi türü özelliğini serileştirir.
PX_Float( ) Tür float özelliğini serileştirir.
PX_IUnknown( ) türünde LPUNKNOWNbir özelliği serileştirir.
PX_Long( ) Tür long özelliğini serileştirir.
PX_Picture( ) Picture türünde bir özelliği serileştirir.
PX_Short( ) Tür short özelliğini serileştirir.
PXstring( ) Tür CString özelliğini serileştirir.
PX_ULong( ) Bir tür ULONG özelliğini serileştirir.
PX_UShort( ) UsHORT türü özelliğini serileştirir.

Bu özellik değişimi işlevleri hakkında daha fazla bilgi için bkz. MFC Başvurusundaki OLE Denetimlerinin Kalıcılığı.

DoPropExchange'in Varsayılan Davranışını Özelleştirme

varsayılan uygulaması DoPropertyExchange (önceki konuda gösterildiği gibi) temel sınıfına COleControlbir çağrı yapar. Bu, tarafından COleControlotomatik olarak desteklenen özellik kümesini seri hale getirerek denetimin yalnızca özel özelliklerini seri hale getirmeden daha fazla depolama alanı kullanır. Bu çağrıyı kaldırmak nesnenizin yalnızca önemli gördüğünüz özellikleri seri hale getirmesine olanak tanır. Denetimin uyguladığı herhangi bir hisse senedi özelliği, denetim nesnesi kaydedilirken veya yüklenirken, bunlar için açıkça PX_ çağrıları eklemediğiniz sürece serileştirilmeyecektir.

Sürüm Desteği Uygulama

Sürüm desteği, düzeltilmiş bir ActiveX denetiminin yeni kalıcı özellikler eklemesine ve denetimin önceki bir sürümü tarafından oluşturulan kalıcı durumu algılayıp yükleyebilmesine olanak tanır. Bir denetimin sürümünü kalıcı verilerinin bir parçası olarak kullanılabilir hale getirmek için denetimin işlevinde COleControl::ExchangeVersion çağrısı yapın DoPropExchange . ActiveX denetimi ActiveX Denetim Sihirbazı kullanılarak oluşturulduysa bu çağrı otomatik olarak eklenir. Sürüm desteği gerekli değilse kaldırılabilir. Ancak, sürüm desteğinin sağladığı ek esneklik için denetim boyutundaki maliyet çok küçüktür (4 bayt).

Denetim ActiveX Denetim Sihirbazı ile oluşturulmadıysa, işlevinizin DoPropExchange başına (çağrısından COleControl::ExchangeVersion önce) aşağıdaki satırı ekleyerek öğesine bir çağrı COleControl::DoPropExchangeekleyin:

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

Sürüm numarası olarak herhangi bir DWORD kullanabilirsiniz. ActiveX Denetim Sihirbazı tarafından oluşturulan projeler varsayılan olarak ve _wVerMajor kullanır_wVerMinor. Bunlar, projenin ActiveX denetim sınıfının uygulama dosyasında tanımlanan genel sabitlerdir. İşlevinizin DoPropExchange geri kalanında, kaydettiğiniz veya aldığınız sürümü almak için istediğiniz zaman CPropExchange::GetVersion çağrısı yapabilirsiniz.

Aşağıdaki örnekte, bu örnek denetiminin sürüm 1'i yalnızca "ReleaseDate" özelliğine sahiptir. Sürüm 2 bir "OriginalDate" özelliği ekler. Denetime eski sürümden kalıcı durumu yüklemesi istenirse, yeni özellik için üye değişkenini varsayılan bir değere başlatır.

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

Varsayılan olarak, denetim eski verileri en son biçime "dönüştürür". Örneğin, bir denetimin 2. sürümü sürüm 1 tarafından kaydedilen verileri yüklerse, yeniden kaydedildiğinde sürüm 2 biçimini yazar. Denetimin verileri son okuma biçiminde kaydetmesini istiyorsanız, çağrısı ExchangeVersionyaparken FALSE'ı üçüncü parametre olarak geçirin. Bu üçüncü parametre isteğe bağlıdır ve varsayılan olarak TRUE'dur.

Ayrıca bkz.

MFC ActiveX Denetimleri