Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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 OLE lehetővé tette az állandó dokumentumok egyedi azonosítását (GetClassFile) és a hozzájuk társított kód (CoCreateInstance, QueryInterface(IID_IPersistFile), QueryInterface(IID_IPersistStorage), IPersistFile::Load, és IPersistStorage::Load) betöltését. A dokumentumok nyomtatásának további lehetővé tételéhez az aktív dokumentumtároló (az eredetileg az OLE 2.0-val nem szállított meglévő OLE-kialakítással) egy alapvető nyomtatási felületet vezet be, amely általában elérhető bármely objektumon keresztül, IPrintamely a dokumentumtípus állandó állapotának betöltésére képes. Az aktív dokumentumok nézetei opcionálisan támogathatják a IPrint felületet, hogy biztosítsák ezeket a képességeket.
Az IPrint interfész a következőképpen van definiálva:
interface IPrint : IUnknown
{
HRESULT SetInitialPageNum([in] LONG nFirstPage);
HRESULT GetPageInfo(
[out] LONG *pnFirstPage,
[out] LONG *pcPages);
HRESULT Print(
[in] DWORD grfFlags,
[in,out] DVTARGETDEVICE **pptd,
[in,out] PAGESET ** ppPageSet,
[in,out] STGMEDIUM **ppstgmOptions,
[in] IContinueCallback* pCallback,
[in] LONG nFirstPage,
[out] LONG *pcPagesPrinted,
[out] LONG *pnPageLast);
};
Az ügyfelek és tárolók egyszerűen IPrint::Print használják, hogy a dokumentum önmagát kinyomtassa a betöltés után, megadva a nyomtatási vezérlő jelzőket, a céleszközt, a nyomtatandó oldalakat és további beállításokat. Az ügyfél a felületen IContinueCallback keresztül is szabályozhatja a nyomtatás folytatását (lásd alább).
Emellett IPrint::SetInitialPageNum támogatja a dokumentumok sorozatának nyomtatását az oldalak zökkenőmentes számozása révén, ami nyilvánvalóan előnyös az olyan aktív dokumentumtárolók számára, mint az Office Binder.
IPrint::GetPageInfo Egyszerűbbé teszi a lapozási információk megjelenítését, ha lehetővé teszi a hívó számára, hogy lekérje a korábban átadott SetInitialPageNum kezdőoldalszámot (vagy a dokumentum belső alapértelmezett kezdőoldal-számát) és a dokumentum oldalainak számát.
A beállításjegyzékben támogatott IPrint objektumok az objektum CLSID-azonosítója alatt tárolt "Nyomtatható" kulccsal vannak megjelölve:
HKEY_CLASSES_ROOT\CLSID\{...}\Printable
IPrint általában ugyanazon az objektumon kerül megvalósításra, amely támogatja a IPersistFile vagy a IPersistStorage. A hívók a "Nyomtatható" kulcs beállításjegyzékében figyelik meg, hogy egy osztály állandó állapotát programozott módon nyomtathatják ki. Jelenleg a "Nyomtatható" azt jelzi, hogy legalább IPrint támogatást biztosít; a jövőben további interfészek kerülhetnek meghatározásra, amelyek QueryInterface elérhetőek lesznek, ahol IPrint csupán az alapszintű támogatást jelenti.
A nyomtatási eljárás során előfordulhat, hogy azt szeretné, hogy a nyomtatást kezdeményező ügyfél vagy tároló szabályozza, hogy a nyomtatás folytatódjon-e. A tároló például támogathatja a "Nyomtatás leállítása" parancsot, amely a lehető leghamarabb leállítja a nyomtatási feladatot. Ennek a képességnek a támogatásához a nyomtatható objektumok ügyfele egy kis értesítési fogadó objektumot implementálhat a felülettel IContinueCallback:
interface IContinueCallback : IUnknown
{
HRESULT FContinue(void);
HRESULT FContinuePrinting(
[in] LONG cPagesPrinted,
[in] LONG nCurrentPage,
[in] LPOLESTR pszPrintStatus);
};
Ez a felület általános folytatási visszahívási függvényként használható, amely a Win32 API különböző folytatási eljárásainak helyét veszi át (például a AbortProc nyomtatáshoz és a EnumMetafileProc metafájlok számbavételéhez). Így ez a felületi kialakítás számos időigényes folyamat esetén hasznos.
A legtöbb általános esetben a IContinueCallback::FContinue függvényt rendszeres időközönként, bármilyen hosszadalmas folyamat hívja meg. A fogadó objektum visszaadja az S_OK-t a művelet folytatásához, és az S_FALSE-t, hogy a lehető leghamarabb leállítsák az eljárást.
Bár a FContinue nem a IPrint::Print kontextusában használatos, hanem a nyomtatás során a IContinueCallback::FContinuePrint kerül alkalmazásra. Minden nyomtatási objektumnak rendszeres időközönként meg kell hívnia FContinuePrinting a kinyomtatott oldalak számát, a nyomtatás alatt lévő oldal számát, valamint egy további szöveget, amely leírja, hogy az ügyfél milyen nyomtatási állapotot jeleníthet meg a felhasználó számára (például "5. oldal 19-ből").