Megosztás a következőn keresztül:


Aktív dokumentumok

Megjegyzés:

A Microsoft Foundation Classes (MFC) könyvtár továbbra is támogatott. A továbbiakban azonban nem adunk hozzá funkciókat, és nem frissítjük a dokumentációt.

Az aktív dokumentumok kibővítik az OLE összetett dokumentumtechnológiáját. Ezek a bővítmények további felületek formájában érhetők el, amelyek a nézeteket kezelik, így az objektumok a tárolókon belül működhetnek, és továbbra is szabályozhatják megjelenítési és nyomtatási funkcióikat. Ez a folyamat lehetővé teszi a dokumentumok megjelenítését mind a külső keretekben (például a Microsoft Office Binderben vagy a Microsoft Internet Explorerben), mind a natív keretekben (például a termék saját nézetportjain).

Ez a szakasz az aktív dokumentumok funkcionális követelményeit ismerteti. Az aktív dokumentum egy adatkészlet tulajdonosa, és hozzáféréssel rendelkezik a tárolóhoz, ahol az adatok menthetők és lekérhetők. Létrehozhat és kezelhet egy vagy több nézetet az adatain. Amellett, hogy támogatja az OLE-dokumentumok szokásos beágyazási és helyben történő aktiválási felületeit, az aktív dokumentum a IOleDocument révén kommunikálja a nézetek létrehozási képességét. Ezen a felületen a tároló kérheti az aktív dokumentum által megjeleníthető nézetek létrehozását (és esetleg számbavételét). Ezen az interfészen keresztül az aktív dokumentum más információkat is biztosíthat magáról, például azt, hogy több nézetet vagy összetett téglalapot támogat-e.

A következő az IOleDocument interfész. Vegye figyelembe, hogy az IEnumOleDocumentViews interfész egy szabványos OLE-számozó a típusok számára IOleDocumentView* .

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);
    }

Minden aktív dokumentumnak rendelkeznie kell ezzel a felülettel rendelkező nézetkeret-szolgáltatóval. Ha a dokumentum nincs tárolóba ágyazva, az aktív dokumentumkiszolgálónak meg kell adnia a nézetkeretet. Ha azonban az aktív dokumentum egy aktív dokumentumtárolóba van beágyazva, a tároló biztosítja a nézetkeretet.

Az aktív dokumentumok létrehozhatnak egy vagy több nézettípust az adatairól (például normál, vázlat, oldalelrendezés stb.). A nézetek szűrőkként működnek, amelyeken keresztül az adatok láthatók. Még ha a dokumentumnak csak egy nézettípusa is van, akkor is érdemes lehet több nézetet támogatni az új ablakfunkciók (például az Office-alkalmazások Ablak menüjének Új ablak eleme) támogatása érdekében.

Az aktív dokumentumokra vonatkozó követelmények

Egy aktív dokumentumtárolóban megjeleníthető aktív dokumentumnak a következőnek kell lennie:

  • Használja az OLE összetett fájljait tárolási mechanizmusként annak implementálásával IPersistStorage.

  • Támogatja az OLE-dokumentumok alapvető beágyazási funkcióit, beleértve a fájlból való létrehozást is. Ez szükségessé teszi az interfészeket IPersistFile, IOleObjectés IDataObject.

  • Egy vagy több nézet támogatása, amelyek mindegyike képes azonnali aktiválásra. Vagyis a nézeteknek támogatniuk kell az interfészt IOleDocumentView , valamint az interfészeket IOleInPlaceObject és IOleInPlaceActiveObject (a tároló IOleInPlaceSite és IOleInPlaceFrame az interfészek használatával).

  • Támogassa a szabványos aktív dokumentumfelületeket: IOleDocument, IOleCommandTarget, és IPrint.

A tárolóoldali interfészek használatának időpontjára és módjára vonatkozó ismereteket ezekben a követelményekben foglaltuk.

Az objektumok megtekintésére vonatkozó követelmények

Az aktív dokumentumok létrehozhatnak egy vagy több nézetet az adatairól. Funkcionálisan ezek a nézetek olyanok, mint a portok egy adott adatmegjelenítési módszerhez. Ha egy aktív dokumentum csak egyetlen nézetet támogat, az aktív dokumentum és az egyetlen nézet egyetlen osztály használatával implementálható. IOleDocument::CreateView ugyanazt az objektum illesztőmutatóját IOleDocumentView adja vissza.

Az aktív dokumentumtárolóban való megjelenítéshez a nézetösszetevőnek támogatnia kell IOleInPlaceObject és IOleInPlaceActiveObject a IOleDocumentView mellett.

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);
    }

Minden nézethez tartozik egy kapcsolódó nézethely, amely magában foglalja a nézetkeretet és a nézetportot (HWND és egy téglalap alakú terület az ablakban). A webhely ezt a funkciót a szabványos IOleInPlaceSite felülettel teszi elérhetővé. Vegye figyelembe, hogy egyetlen HWND-n több nézetport is lehet.

Általában minden nézettípus eltérő nyomtatott megjelenítéssel rendelkezik. Ezért a nézeteknek és a megfelelő nézetoldalaknak implementálniuk kell a nyomtatási felületeket, ha IPrint és IContinueCallback teljesül. A nézetkeretnek egyeztetnie kell a nézetszolgáltatóval IPrint a nyomtatás megkezdése előtt, hogy az élőfejek, élőlábak, margók és kapcsolódó elemek nyomtatása megfelelően történjen. A nézetszolgáltató értesíti a keretet a nyomtatással kapcsolatos eseményekről IContinueCallback segítségével. Az interfészek használatáról további információt a Programmatic Printing (Programmatic Printing) című témakörben talál.

Vegye figyelembe, hogy ha egy aktív dokumentum csak egyetlen nézetet támogat, akkor az aktív dokumentum és az egyetlen nézet egyetlen konkrét osztály használatával valósítható meg. IOleDocument::CreateView egyszerűen ugyanazt az objektum felületi mutatóját IOleDocumentView adja vissza. Röviden, nem szükséges, hogy két különálló objektumpéldány legyen, ha csak egy nézetre van szükség.

A nézetobjektumok parancscélok is lehetnek. A nézet implementálásával IOleCommandTarget a tároló felhasználói felületéről származó parancsok fogadhatók (például Új, Megnyitás, Mentés másként, Nyomtatás a Fájl menüben; és Másolás, Beillesztés, Visszavonás a Szerkesztés menüben). További információ: Üzenetkezelés és parancscélok.

Lásd még

Aktív dokumentum-konténerelés