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 CObject
serileş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
Denetim nesnenizi seri hale getirmek için işlev uygulama
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 LPUNKNOWN bir ö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 COleControl
bir çağrı yapar. Bu, tarafından COleControl
otomatik 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::DoPropExchange
ekleyin:
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ı ExchangeVersion
yaparken FALSE'ı üçüncü parametre olarak geçirin. Bu üçüncü parametre isteğe bağlıdır ve varsayılan olarak TRUE'dur.