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


Gyorsítótárazás megjelenítése

A tárolóalkalmazásoknak képesnek kell lenniük egy objektum bemutatójának lekérésére annak érdekében, hogy megjeleníthessék vagy kinyomtathassák a felhasználók számára, amikor a dokumentum meg van nyitva, de az objektum kiszolgálóalkalmazása nem fut vagy nincs telepítve a felhasználó gépére. Tegyük fel azonban, hogy a dokumentumokban esetleg megtalálható összes objektum kiszolgálói minden felhasználó gépére telepítve vannak, és mindig igény szerint futtathatók. Az alapértelmezett objektumkezelő, amely mindig elérhető, azzal oldja meg ezt a dilemmát, hogy a dokumentum tárolójában gyorsítótárazi az objektumbemutatókat, és bármilyen platformon módosítja ezeket a bemutatókat, függetlenül attól, hogy az objektumkiszolgáló milyen rugalmasságot biztosít a tároló bármely adott telepítésén.

A tárolók az objektum képernyőn való fenntartásához szükséges mellett egy vagy több konkrét céleszközhöz is tarthatnak rajzbemutatókat. Továbbá, ha az objektumot az egyik platformról a másikra portozza, az OLE automatikusan átalakítja az objektum adatformátumait az új platformon támogatottakká. Ha például áthelyez egy objektumot a Windowsból a Macintoshba, az OLE a metafájl-bemutatóit PICT-formátumokká alakítja.

Annak érdekében, hogy egy beágyazott objektum pontos ábrázolása jelenjen meg a felhasználó számára, az objektum tárolóalkalmazása párbeszédet kezdeményez az objektumkezelővel, adatokat és rajzi utasításokat kérve. A tároló kéréseinek teljesítéséhez a kezelőnek implementálnia kell a IDataObject, IViewObject2és IOleCache interfészeket.

IDataObject lehetővé teszi, hogy az OLE-tárolóalkalmazás adatokat szerezzen be és adatokat küldjön beágyazott vagy csatolt objektumaiba. Amikor az adatok megváltoznak egy objektumban, ez az interfész lehetővé teszi az objektum számára, hogy az új adatokat elérhetővé tegye a tároló számára, és lehetővé teszi a tároló számára az objektum másolatában lévő adatok frissítését. (Az adatátvitel általános ismertetését lásd: 4. fejezet, Adatátvitel.)

Az IViewObject2 felület nagyon hasonlít az IDataObject felülethez, azzal a kivételrel, hogy egy objektumot arra kér, hogy rajzolja meg magát egy eszközkörnyezetben, például képernyőn, nyomtatón vagy metafájlon, ahelyett, hogy áthelyezné vagy átmásolja az adatait a memóriába vagy más átviteli adathordozóra. Az interfész célja, hogy lehetővé tegye az OLE tárolók számára, hogy alternatív képi ábrázolásokat szerezzenek be beágyazott objektumaikról, melyek adataival már rendelkeznek, így elkerülve, hogy ugyanazon adatobjektumok teljesen új példányait pusztán új rajzutasítások megszerzéséhez kellene továbbítani. Ehelyett az IViewObject2felület lehetővé teszi, hogy a tároló megkérjen egy objektumot, hogy képi ábrázolásokat adjon önmagáról a tároló által megadott eszközkörnyezet alapján.

Amikor a IViewObject2 interfész meghívásra kerül, a tárolóalkalmazás megadhatja azt is, hogy az objektum egy a tényleges rendereléstől eltérő céleszközön jelenítse meg magát. Ez lehetővé teszi, hogy a tároló szükség szerint különböző rendereléseket hozzon létre egyetlen objektumból. A hívó például megkérheti az objektumot, hogy készüljön fel a nyomtatásra, noha a rajz a képernyőn fog megjelenni. Az eredmény természetesen az objektum nyomtatási képe lesz.

Az IViewObject2felület olyan metódusokat is biztosít, amelyekkel a tárolók regisztrálhatnak a nézetmódosítási értesítésekre. Az adatokhoz és az OLE-tanácsadókhoz hasonlóan a nézettanácsadási kapcsolat lehetővé teszi, hogy a tárolók saját kényelme szerint frissítsék az objektumok renderelését, és ne az objektumból érkező hívásra válaszoljanak. Ha például egy objektum kiszolgálóalkalmazásának új verziója ugyanazokat az adatokat további nézetekkel szeretné biztosítani, az objektum alapértelmezett kezelője meghívja az egyes tárolók IAdviseSink::OnViewChange implementációját, hogy tudassa velük, hogy az új bemutatók elérhetők. A tároló csak szükség esetén kérné le ezeket az információkat a konzultációs csatornáról.

Mivel a Windows-eszközkörnyezetek csak egyetlen folyamaton belül rendelkeznek jelentéssel, nem adhat át IViewObject2 mutatót a folyamathatárok között. Ennek eredményeképpen az OLE helyi és távoli kiszolgálóinak nem kell semmilyen módon implementálniuk a felületet, ami akkor sem működne megfelelően, ha tennék. Csak az objektumkezelők és a folyamaton belüli kiszolgálók implementálják a IViewObject2felületet. Az OLE egy alapértelmezett implementációt biztosít, amelyet az OLE alapértelmezett kezelőjének összesítésével használhat a saját OLE folyamatközi kiszolgálóiban és objektumkezelőiben. Vagy megírhatja az IViewObject2saját implementációját is.

Egy objektum implementálja az IOleCache felületet, hogy a kezelő tudja, milyen képességeket kell gyorsítótáraznia. Az objektumkezelő a gyorsítótárat is birtokolja, és gondoskodik róla, hogy naprakész legyen. Amikor a beágyazott objektum futó állapotba lép, a kezelő beállítja a megfelelő tanácsadási összeköttetéseket a kiszolgáló-objektumon, önmaga vevőpontként működve. Az IDataObject és IViewObject2felületi implementációk az ügyféloldalon gyorsítótárazott adatokból működnek. Az IViewObject2kezelőjének feladata annak meghatározása, hogy milyen adatformátumokat gyorsítótárazzon az ügyfélrajzolási kérelmek kielégítése érdekében. Az IDataObject kezelőjének feladata az adatok különböző formátumban történő lekérése a memória és az alapul szolgáló IStorage beágyazott objektumpéldány között. Az egyéni kezelők az alapértelmezett kezelő egyesítésével használhatják ezeket az implementációkat.

Jegyzet

Az IViewObject2 interfész az IViewObject egyszerű funkcionális bővítménye, amelyet az utóbbi felület helyett kell implementálni, amely mára elavult. Az IViewObject metódusok mellett az IViewObject2 interfész egyetlen további tagot is biztosít, GetExtent, amely lehetővé teszi, hogy a tárolóalkalmazások az objektum bemutatójának méretét lekérje a gyorsítótárból anélkül, hogy először át kellene helyeznie az objektumot a futó állapotba az IOleObject hívásával: GetExtent.

 

összetett dokumentumok