Dokumen Aktif
Dokumen aktif memperluas teknologi dokumen campuran OLE. Ekstensi ini disediakan dalam bentuk antarmuka tambahan yang mengelola tampilan, sehingga objek dapat berfungsi dalam kontainer dan namun mempertahankan kontrol atas fungsi tampilan dan pencetakannya. Proses ini memungkinkan untuk menampilkan dokumen baik dalam bingkai asing (seperti Microsoft Office Binder atau Microsoft Internet Explorer) dan dalam bingkai asli (seperti port tampilan produk sendiri).
Bagian ini menjelaskan persyaratan fungsi untuk dokumen aktif. Dokumen aktif memiliki sekumpulan data dan memiliki akses ke penyimpanan tempat data dapat disimpan dan diambil. Ini dapat membuat dan mengelola satu atau beberapa tampilan pada datanya. Selain mendukung antarmuka aktivasi dokumen OLE yang biasa disematkan dan di tempat, dokumen aktif mengkomunikasikan kemampuannya untuk membuat tampilan melalui IOleDocument
. Melalui antarmuka ini, kontainer dapat meminta untuk membuat (dan mungkin menghitung) tampilan yang dapat ditampilkan dokumen aktif. Melalui antarmuka ini, dokumen aktif juga dapat memberikan informasi lain-lain tentang dirinya sendiri, seperti apakah mendukung beberapa tampilan atau persegi panjang yang kompleks.
Berikut ini adalah antarmukanya IOleDocument
. Perhatikan bahwa IEnumOleDocumentViews
antarmuka adalah enumerator OLE standar untuk IOleDocumentView*
jenis.
interface IOleDocument : IUnknown
{
HRESULT CreateView(
[in] IOleInPlaceSite *pIPSite,
[in] IStream *pstm,
[in] DWORD dwReserved,
[out] IOleDocumentView **ppView);
HRESULT GetDocMiscStatus([out] DWORD *pdwStatus);
HRESULT EnumViews(
[out] IEnumOleDocumentViews **ppEnum,
[out] IOleDocumentView **ppView);
}
Setiap dokumen aktif harus memiliki penyedia bingkai tampilan dengan antarmuka ini. Jika dokumen tidak disematkan dalam kontainer, server dokumen aktif itu sendiri harus menyediakan bingkai tampilan. Namun, ketika dokumen aktif disematkan dalam kontainer dokumen aktif, kontainer menyediakan bingkai tampilan.
Dokumen aktif dapat membuat satu atau beberapa jenis tampilan datanya (misalnya, normal, kerangka, tata letak halaman, dan sebagainya). Tampilan bertindak seperti filter tempat data dapat dilihat. Meskipun dokumen hanya memiliki satu jenis tampilan, Anda mungkin masih ingin mendukung beberapa tampilan sebagai sarana untuk mendukung fungsionalitas jendela baru (misalnya, item Jendela Baru pada menu Jendela dalam aplikasi Office likasi).
Persyaratan untuk Dokumen Aktif
Dokumen aktif yang dapat ditampilkan dalam kontainer dokumen aktif harus:
Gunakan File Gabungan OLE sebagai mekanisme penyimpanannya dengan menerapkan
IPersistStorage
.Mendukung fitur penyematan dasar Dokumen OLE, termasuk Buat Dari File. Ini menskalakan antarmuka
IPersistFile
, ,IOleObject
danIDataObject
.Mendukung satu atau beberapa tampilan, yang masing-masing mampu melakukan aktivasi di tempat. Artinya, tampilan harus mendukung antarmuka
IOleDocumentView
serta antarmukaIOleInPlaceObject
danIOleInPlaceActiveObject
(menggunakan kontainerIOleInPlaceSite
danIOleInPlaceFrame
antarmuka).Mendukung antarmuka
IOleDocument
dokumen aktif standar , ,IOleCommandTarget
danIPrint
.
Pengetahuan tentang kapan dan cara menggunakan antarmuka sisi kontainer tersirat dalam persyaratan ini.
Persyaratan untuk Melihat Objek
Dokumen aktif dapat membuat satu atau beberapa tampilan datanya. Secara fungsional, tampilan ini seperti port ke metode tertentu untuk menampilkan data. Jika dokumen aktif hanya mendukung satu tampilan, dokumen aktif dan tampilan tunggal tersebut dapat diimplementasikan menggunakan satu kelas. IOleDocument::CreateView
mengembalikan penunjuk IOleDocumentView
antarmuka objek yang sama.
Untuk diwakili dalam kontainer dokumen aktif, komponen tampilan harus mendukung IOleInPlaceObject
dan IOleInPlaceActiveObject
selain IOleDocumentView
:
interface IOleDocumentView : IUnknown
{
HRESULT SetInPlaceSite([in] IOleInPlaceSite *pIPSite);
HRESULT GetInPlaceSite([out] IOleInPlaceSite **ppIPSite);
HRESULT GetDocument([out] IUnknown **ppunk);
[input_sync] HRESULT SetRect([in] LPRECT prcView);
HRESULT GetRect([in] LPRECT prcView);
[input_sync] HRESULT SetRectComplex(
[in] LPRECT prcView,
[in] LPRECT prcHScroll,
[in] LPRECT prcVScroll,
[in] LPRECT prcSizeBox);
HRESULT Show([in] BOOL fShow);
HRESULT UIActivate([in] BOOL fUIActivate);
HRESULT Open(void);
HRESULT CloseView([in] DWORD dwReserved);
HRESULT SaveViewState([in] IStream *pstm);
HRESULT ApplyViewState([in] IStream *pstm);
HRESULT Clone(
[in] IOleInPlaceSite *pIPSiteNew,
[out] IOleDocumentView **ppViewNew);
}
Setiap tampilan memiliki situs tampilan terkait, yang merangkum bingkai tampilan dan port tampilan (HWND dan area persegi panjang di jendela tersebut). Situs ini mengekspos fungsionalitas ini melalui antarmuka standar IOleInPlaceSite
. Perhatikan bahwa dimungkinkan untuk memiliki lebih dari satu port tampilan pada satu HWND.
Biasanya, setiap jenis tampilan memiliki representasi cetak yang berbeda. Oleh karena itu tampilan dan situs tampilan yang sesuai harus mengimplementasikan antarmuka pencetakan jika IPrint
dan IContinueCallback
, masing-masing. Bingkai tampilan harus bernegosiasi dengan penyedia IPrint
tampilan saat pencetakan dimulai, sehingga header, footer, margin, dan elemen terkait dicetak dengan benar. Penyedia tampilan memberi tahu bingkai peristiwa terkait pencetakan melalui IContinueCallback
. Untuk informasi selengkapnya tentang penggunaan antarmuka ini, lihat Pencetakan Terprogram.
Perhatikan bahwa jika dokumen aktif hanya mendukung satu tampilan, maka dokumen aktif dan tampilan tunggal tersebut dapat diimplementasikan menggunakan satu kelas konkret. IOleDocument::CreateView
hanya mengembalikan penunjuk IOleDocumentView
antarmuka objek yang sama. Singkatnya, tidak perlu ada dua instans objek terpisah ketika hanya satu tampilan yang diperlukan.
Objek tampilan juga dapat menjadi target perintah. Dengan menerapkan IOleCommandTarget
tampilan dapat menerima perintah yang berasal dari antarmuka pengguna kontainer (seperti Baru, Buka, Simpan Sebagai, Cetak pada menu File; dan Salin, Tempel, Batalkan pada menu Edit). Untuk informasi selengkapnya, lihat Penanganan Pesan dan Target Perintah.