Formanty ActiveX MFC: szeregowania
W tym artykule omówiono sposób szeregować formantu ActiveX.Serializacja jest proces odczyt lub zapis na nośnik magazynu trwałego, takiego jak plik na dysku.Biblioteka Microsoft Foundation klasy (MFC) udostępnia wbudowaną obsługę serializacji w klasie CObject.COleControlrozszerzenie tej obsługi formantów ActiveX, korzystając z mechanizmu wymiany właściwości.
Serializacji dla formantów ActiveX jest implementowana przez zastępowanie COleControl::DoPropExchange.Ta funkcja wywoływana podczas ładowania i zapisania obiektu formantu przechowuje wszystkie właściwości z zmienną lub zmienną z powiadomienie o zmianie.
Poniższe tematy obejmują główne kwestie związane z szeregowania formantu ActiveX:
Wykonania DoPropExchange funkcji szeregować obiektu formantu
Dostosowywanie procesu serializacji
Implementowanie obsługi wersji
Realizacji funkcji DoPropExchange
Podczas generowania Projekt kontroli za pomocą Kreatora formantu ActiveX, kilka funkcji obsługi domyślne są automatycznie dodawane do klasy kontroli, w tym realizacji domyślne COleControl::DoPropExchange.Kod dodaje do klas utworzonych za pomocą Kreatora formantu ActiveX można znaleźć w poniższym przykładzie:
void CMyAxUICtrl::DoPropExchange(CPropExchange* pPX)
{
ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
COleControl::DoPropExchange(pPX);
// TODO: Call PX_ functions for each persistent custom property.
}
Właściwość trwałego, zmodyfikuj DoPropExchange , dodając wywołanie funkcji exchange właściwości.Poniższy przykład ilustruje serializacji niestandardowej właściwości Boolean CircleShape, gdy właściwość CircleShape ma wartość domyślną TRUE:
void CMyAxSerCtrl::DoPropExchange(CPropExchange* pPX)
{
ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
COleControl::DoPropExchange(pPX);
...
PX_Bool(pPX, _T("CircleShape"), m_bCircleShape, TRUE);
}
W poniższej tabeli przedstawiono funkcje wymiany możliwych właściwości, których można szeregować właściwości formantu:
Funkcje wymiany właściwości |
Cel |
---|---|
(PX_Blob) |
Szereguje typu właściwości danych dużych obiektu binarnego (BLOB). |
(PX_Bool) |
Szereguje typu właściwość logiczna. |
(PX_Color) |
Szereguje właściwości kolorów typu. |
(PX_Currency) |
Szereguje typu CY właściwość (waluta). |
(PX_Double) |
Szereguje typu double właściwości. |
(PX_Font) |
Szereguje właściwość Typ czcionki. |
(PX_Float) |
Szereguje typu pływaka właściwości. |
(PX_IUnknown) |
Właściwość typu szereguje LPUNKNOWN. |
(PX_Long) |
Szereguje typu long właściwości. |
(PX_Picture) |
Szereguje typu właściwości obrazu. |
(PX_Short) |
Szereguje typu krótki właściwości. |
(PX_String) |
Szereguje typu CString właściwości. |
(PX_ULong) |
Szereguje typu ULONG właściwości. |
(PX_UShort) |
Szereguje typu USHORT właściwości. |
Aby uzyskać więcej informacji o tych funkcjach wymiany właściwości, zobacz Trwałości OLE kontrolek w Odniesienia MFC.
Dostosowywanie zachowania domyślne DoPropExchange
Domyślne wykonania DoPropertyExchange (jak pokazano w poprzednim temacie) wykonuje wywołanie klasa podstawowa COleControl.Szereguje to zestaw właściwości automatycznie obsługiwane przez COleControl, która używa więcej miejsca niż serializacji niestandardowej właściwości formantu.Usunięcie tego wywołania umożliwia obiekt szeregować tylko te właściwości, które uznają za istotne.Każde Państwa zapasów właściwości formantu została zaimplementowana nie będą wykonywane szeregowo, podczas zapisywania lub ładowania obiektu formantu, chyba że dodasz PX_ je wywołuje.
Implementowanie obsługi wersji
Obsługa wersji umożliwia poprawioną formantu ActiveX dodać nowe właściwości trwałe i być może wykryć i załadować trwały stan utworzony we wcześniejszej wersji formantu.Aby udostępnić wersję formantu jako część jego trwałe dane wywołania COleControl::ExchangeVersion w formancie DoPropExchange funkcji.To wywołanie jest wstawiany automatycznie, jeśli formant ActiveX został utworzony za pomocą Kreatora formantu ActiveX.Można usunąć, jeśli nie jest potrzebna obsługa wersji.Koszty kontroli wielkości jest jednak bardzo małych (4 bajty) dodano elastyczność, która zapewnia obsługę wersji.
Jeśli formant nie został utworzony za pomocą Kreatora formantu ActiveX, należy dodać wywołanie COleControl::ExchangeVersion , wstawiając poniższy wiersz na początku your DoPropExchange funkcji (przed wywołaniem COleControl::DoPropExchange):
void CMyAxSerCtrl::DoPropExchange(CPropExchange* pPX)
{
ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
COleControl::DoPropExchange(pPX);
...
}
Można użyć dowolnego DWORD jako numer wersji.Użyj projektów wygenerowany przez kreatora formantu ActiveX _wVerMinor i _wVerMajor jako domyślny.Są to globalne stałe zdefiniowane w pliku implementacji klasy formantu ActiveX projektu.W pozostałej części sieci DoPropExchange funkcji, można wywołać CPropExchange::GetVersion w dowolnym momencie pobrać wersję podczas zapisywania lub pobieranie.
W następującym przykładzie wersja 1 tej próbki kontrolnej ma tylko właściwości "ReleaseDate".Wersja 2 dodaje właściwość "OriginalDate".Jeśli formant został zobowiązany do załadowania trwały stan starszej wersji, inicjuje zmienną dla nowej właściwości na wartość domyślną.
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;
}
...
}
Domyślnie formant "konwertuje" stare dane w formacie najnowszej wersji.Na przykład jeśli formant w wersji 2 ładuje zostało zapisane w wersji 1, go zapisze format w wersji 2, gdy jest on ponownie zapisywany.Formantu Aby zapisać dane w odczytu ostatni format, należy przekazać FALSE jako trzeci parametr podczas wywoływania ExchangeVersion.Ten trzeci parametr jest opcjonalny i jest TRUE domyślnie.