Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini membahas cara membuat serial kontrol ActiveX. Serialisasi adalah proses membaca dari atau menulis ke media penyimpanan persisten, seperti file disk. Pustaka Microsoft Foundation Class (MFC) menyediakan dukungan bawaan untuk serialisasi di kelas CObject.
COleControl memperluas dukungan ini ke kontrol ActiveX melalui penggunaan mekanisme pertukaran properti.
Penting
ActiveX adalah teknologi warisan yang tidak boleh digunakan untuk pengembangan baru. Untuk informasi selengkapnya tentang teknologi modern yang menggantikan ActiveX, lihat Kontrol ActiveX.
Serialisasi untuk kontrol ActiveX diimplementasikan dengan menimpa COleControl::DoPropExchange. Fungsi ini, yang dipanggil selama pemuatan dan penyimpanan objek kontrol, menyimpan semua properti yang diimplementasikan dengan variabel anggota atau variabel anggota dengan pemberitahuan perubahan.
Topik berikut mencakup masalah utama yang terkait dengan serialisasi kontrol ActiveX:
Menerapkan
DoPropExchangefungsi untuk menserialisasikan objek kontrol Anda
Menerapkan Fungsi DoPropExchange
Saat Anda menggunakan Panduan Kontrol ActiveX untuk menghasilkan proyek kontrol, beberapa fungsi handler default secara otomatis ditambahkan ke kelas kontrol, termasuk implementasi default COleControl::D oPropExchange. Contoh berikut menunjukkan kode yang ditambahkan ke kelas yang dibuat dengan Panduan Kontrol ActiveX:
void CMyAxUICtrl::DoPropExchange(CPropExchange* pPX)
{
ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
COleControl::DoPropExchange(pPX);
// TODO: Call PX_ functions for each persistent custom property.
}
Jika Anda ingin membuat properti persisten, ubah DoPropExchange dengan menambahkan panggilan ke fungsi pertukaran properti. Contoh berikut menunjukkan serialisasi properti CircleShape Boolean kustom, di mana properti CircleShape memiliki nilai default TRUE:
void CMyAxSerCtrl::DoPropExchange(CPropExchange* pPX)
{
ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
COleControl::DoPropExchange(pPX);
PX_Bool(pPX, _T("CircleShape"), m_bCircleShape, TRUE);
}
Tabel berikut ini mencantumkan kemungkinan fungsi pertukaran properti yang bisa Anda gunakan untuk membuat serialisasi properti kontrol:
| Fungsi pertukaran properti | Tujuan |
|---|---|
| PX_Blob( ) | Menserialisasikan properti data tipe Objek Besar Biner (BLOB). |
| PX_Bool( ) | Melakukan serialisasi properti tipe Boolean. |
| PX_Color( ) | Melakukan serialisasi properti tipe warna. |
| PX_Currency( ) | Menserialisasikan properti jenis CY (mata uang). |
| PX_Double( ) | Melakukan serialisasi properti jenis double. |
| PX_Font( ) | Menserialisasikan properti Jenis font. |
| PX_Float( ) | Melakukan serialisasi properti jenis float. |
| PX_IUnknown( ) | Menserialisasikan properti jenis LPUNKNOWN. |
| PX_Long( ) | Melakukan serialisasi properti jenis long. |
| PX_Picture( ) | Menserialisasikan properti tipe Gambar. |
| PX_Short( ) | Melakukan serialisasi properti jenis short. |
| PXstring( ) | Melakukan serialisasi properti jenis CString. |
| PX_ULong( ) | Menyerialisasikan properti tipe ULONG. |
| PX_UShort( ) | Menserialisasikan properti jenis USHORT . |
Untuk informasi selengkapnya tentang fungsi pertukaran properti ini, lihat Persistensi Kontrol OLE di Referensi MFC.
Menyesuaikan Perilaku Bawaan DoPropExchange
Implementasi default DoPropertyExchange (seperti yang ditunjukkan pada topik sebelumnya) melakukan panggilan ke kelas dasar COleControl. Ini menserialisasikan kumpulan properti yang secara otomatis didukung oleh COleControl, yang menggunakan lebih banyak ruang penyimpanan daripada hanya menserialisasikan properti kustom kontrol. Menghapus panggilan ini memungkinkan objek Anda untuk menserialisasikan hanya properti yang Anda anggap penting. Sifat stok apa pun yang dimiliki kontrol tidak akan diserialisasi saat menyimpan atau memuat objek kontrol kecuali jika Anda secara eksplisit menambahkan panggilan PX_ untuk mereka.
Menerapkan Dukungan Versi
Dukungan versi memungkinkan kontrol ActiveX yang direvisi untuk menambahkan properti persisten baru, dan masih dapat mendeteksi dan memuat status persisten yang dibuat oleh versi kontrol sebelumnya. Untuk membuat versi kontrol tersedia sebagai bagian dari data persistennya, panggil COleControl::ExchangeVersion dalam fungsi kontrol DoPropExchange . Panggilan ini secara otomatis disisipkan jika kontrol ActiveX dibuat menggunakan Panduan Kontrol ActiveX. Ini dapat dihapus jika dukungan versi tidak diperlukan. Namun, investasi pada ukuran kontrol sangat kecil (4 byte) demi fleksibilitas tambahan yang diberikan oleh dukungan terhadap versi.
Jika kontrol tidak dibuat dengan Panduan Kontrol ActiveX, tambahkan panggilan ke COleControl::ExchangeVersion dengan menyisipkan baris berikut di awal fungsi Anda DoPropExchange (sebelum panggilan ke COleControl::DoPropExchange):
void CMyAxSerCtrl::DoPropExchange(CPropExchange* pPX)
{
ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
COleControl::DoPropExchange(pPX);
}
Anda dapat menggunakan DWORD apa pun sebagai nomor versi. Proyek yang dihasilkan oleh Panduan Kontrol ActiveX menggunakan _wVerMinor dan _wVerMajor sebagai default. Ini adalah konstanta global yang ditentukan dalam file implementasi kelas kontrol ActiveX proyek. Dalam sisa fungsi Anda DoPropExchange, Anda dapat memanggil CPropExchange::GetVersion kapan saja untuk mengambil versi yang sedang disimpan atau diambil.
Dalam contoh berikut, versi 1 dari kontrol sampel ini hanya memiliki properti "ReleaseDate". Versi 2 menambahkan properti "OriginalDate". Jika kontrol diinstruksikan untuk memuat status persisten dari versi lama, kontrol menginisialisasi variabel anggota untuk properti baru ke nilai default.
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;
}
}
Secara default, kontrol "mengonversi" data lama ke format terbaru. Misalnya, jika versi 2 kontrol memuat data yang disimpan oleh versi 1, kontrol akan menulis format versi 2 saat disimpan lagi. Jika Anda ingin kontrol menyimpan data dalam format baca terakhir, teruskan FALSE sebagai parameter ketiga saat memanggil ExchangeVersion. Parameter ketiga ini bersifat opsional dan TRUE secara default.