mfc ActiveX denetimleri: seri hale getirilmedi
Bu makalede, bir ActiveX denetimi seri hale getirilmeye açıklanır. Seri hale getirme disketten okunurken veya yazılırken disk dosyası gibi bir kalıcı depolama ortamına işlemidir. Microsoft Foundation Class (mfc) kitaplık seri hale getirme sınıf yerleşik destek sağlar CObject. COleControlBu, özellik exchange mekanizması ActiveX denetimleri desteği genişletir.
ActiveX denetimleri için seri hale getirme geçersiz kılarak gerçekleştirilir COleControl::DoPropExchange. Bu işlev, yükleme sırasında adı verilen ve Denetim nesnesinin kaydetme üye değişkeni veya bir üye değişkeni bildirimi ile birlikte uygulanan tüm özelliklerini saklar.
Seri hale getirilirken bir ActiveX denetimi için ilgili ana sorunları aşağıdaki konuları kapsar:
Uygulama DoPropExchange işlevi bilgisayarınızın denetimini nesne seri hale getirmek için
Seri hale getirme işlemini özelleştirme
Sürüm desteği sağlama
DoPropExchange işlevi uygulamak
Denetim projesi oluşturmak için ActiveX denetim Sihirbazı'nı kullandığınızda, birkaç varsayılan işleyicisi işlevler denetim sınıfı için varsayılan uygulanması da dahil olmak üzere otomatik olarak eklenir COleControl::DoPropExchange. ActiveX denetim Sihirbazı ile oluşturulan sınıfları için eklenen kod aşağıdaki örnekte gösterilmektedir:
void CMyAxUICtrl::DoPropExchange(CPropExchange* pPX)
{
ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
COleControl::DoPropExchange(pPX);
// TODO: Call PX_ functions for each persistent custom property.
}
Değiştirme özelliği kalıcı kılmak isterseniz, DoPropExchange özelliği exchange işlevine bir çağrı ekleyerek. CircleShape özelliği, varsayılan değer olarak bulunduğu özel bir Boolean CircleShape özelliği seri hale getirme aşağıdaki örnekte gösterilmiştir doğru:
void CMyAxSerCtrl::DoPropExchange(CPropExchange* pPX)
{
ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
COleControl::DoPropExchange(pPX);
...
PX_Bool(pPX, _T("CircleShape"), m_bCircleShape, TRUE);
}
Denetimin özelliklerini seri hale getirmek için kullanabileceğiniz olası özelliği exchange işlevleri aşağıdaki tabloda listelenmektedir:
Özellik exchange işlevleri |
Purpose |
---|---|
PX_Blob) |
Bir tür ikili büyük nesne (blob) veri özelliği serileştirildiğini. |
PX_Bool) |
Tür Boole özelliği serileştirildiğini. |
PX_Color) |
Bir tür renk özelliği serileştirildiğini. |
PX_Currency) |
Bir tür serileştirildiğini cy (para) özelliği. |
PX_Double) |
Bir tür serileştirildiğini çift özelliği. |
PX_Font) |
Yazı tipi özelliğini serileştirildiğini. |
PX_Float) |
Bir tür serileştirildiğini float özelliği. |
PX_IUnknown) |
Özellik türü serileştirildiğini LPUNKNOWN. |
PX_Long) |
Bir tür serileştirildiğini uzun özelliği. |
PX_Picture) |
Resim özellik türü serileştirildiğini. |
PX_Short) |
Bir tür serileştirildiğini kısa özelliği. |
PX_String) |
Bir tür serileştirildiğini CString özelliği. |
PX_ULong) |
Bir tür serileştirildiğini ulong özelliği. |
PX_UShort) |
Bir tür serileştirildiğini ushort özelliği. |
Bu özellik exchange işlevleri hakkında daha fazla bilgi için bkz: Kalıcılık, ole denetimleri , mfc başvuru.
DoPropExchange varsayılan davranışını özelleştirme
Varsayılan uygulama olarak DoPropertyExchange (gösterildiği gibi önceki konu) sınıfın temel bir çağrı yapar COleControl. Bu otomatik olarak desteklediği özellikler kümesini serileştirildiğini COleControl, denetimin özel özelliklerini seri hale getirilmedi'den daha fazla depolama alanı kullanır. Bu çağrı kaldırma nesneniz yalnızca önemli olduğunu düşündüğünüz özellikler seri hale getirmek sağlar. Denetime uygulanan herhangi bir hisse senedi özellik durumları açıkça eklemediğiniz sürece denetim nesnesi yüklenirken veya kaydederken diziselleştirilir değil px_ için onları çağırır.
Sürüm desteği sağlama
Sürekli yeni özellikler ekleme ve hala algılamak ve denetimin önceki bir sürümünde oluşturulmuş kalıcı durum yükleme yapabilmek yeniden düzenlenen bir ActiveX denetimi sürüm desteğini etkinleştirir. Denetimin sürüm kullanılabilir duruma getirmek için kalıcı verilerinin bir parçası olarak, çağrı COleControl::ExchangeVersion , denetimin DoPropExchange işlevi. ActiveX denetimi ActiveX denetimi Sihirbazı'nı kullanarak oluşturduysanız, bu çağrıyı otomatik olarak eklenir. Sürüm desteği gerekli olursa Kaldırılabilir. Ancak, Denetim boyutu çok maliyetidir sürüm desteği sağlayan ek bir esneklik için küçük (4 bayt).
Denetim ActiveX denetim Sihirbazı'yla oluşturulmuş bir çağrı ekleyin COleControl::ExchangeVersion başında aşağıdaki satırı ekleyerek, DoPropExchange işlevi (çağrısından önce COleControl::DoPropExchange):
void CMyAxSerCtrl::DoPropExchange(CPropExchange* pPX)
{
ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
COleControl::DoPropExchange(pPX);
...
}
Kullanabilirsiniz DWORD sürüm numarası. ActiveX denetim Sihirbazı tarafından oluşturulan projeleri kullanmak _wVerMinor ve _wVerMajor varsayılan olarak. Bu ActiveX denetiminin sınıf projenin uygulama dosyasında tanımlanan genel sabittir. İçinde geri kalanı sizin DoPropExchange işlevini çağırabilir CPropExchange::GetVersion kaydetme veya alma sürümü almak için herhangi bir zamanda.
Aşağıdaki örnekte, bu örnek denetim 1 sürümü yalnızca bir "ReleaseDate" özelliğine sahiptir. Sürüm 2 "OriginalDate" özelliği ekler. Sürekli durumu eski sürümü yüklemek için Denetim belirtilmedikçe yeni özellik için varsayılan değer için üye değişkeni 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 veri son biçimine dönüştürür". Bir denetimin sürüm 2 sürüm 1 kaydedilmiş verileri yüklenirse, yeniden kaydedildiğinde, bu sürüm 2 biçimi yazacaksınız. Veri biçimi son okuma kaydetmek için denetim istiyorsanız geçmesi yanlış çağrılırken üçüncü bir parametre olarak ExchangeVersion. Bu üçüncü parametre isteğe bağlıdır ve doğru varsayılan.