Bagikan melalui


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, , IOleObjectdan IDataObject.

  • Mendukung satu atau beberapa tampilan, yang masing-masing mampu melakukan aktivasi di tempat. Artinya, tampilan harus mendukung antarmuka IOleDocumentView serta antarmuka IOleInPlaceObject dan IOleInPlaceActiveObject (menggunakan kontainer IOleInPlaceSite dan IOleInPlaceFrame antarmuka).

  • Mendukung antarmuka IOleDocumentdokumen aktif standar , , IOleCommandTargetdan IPrint.

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.

Baca juga

Penahanan Dokumen Aktif