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


Programozott nyomtatás

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").

Lásd még

Aktív dokumentumtárolók