Sdílet prostřednictvím


Tisk prostřednictvím kódu programu

TECHNOLOGIE OLE poskytla prostředky k jednoznačné identifikaci trvalých dokumentů (GetClassFile) a jejich načtení do jejich přidruženého kódu (CoCreateInstance, QueryInterface(IID_IPersistFile), QueryInterface(IID_IPersistStorage), IPersistFile::Loada IPersistStorage::Load). Chcete-li dále povolit tisk dokumentů, aktivní uzavření dokumentu (pomocí existujícího návrhu OLE, který není původně dodáván s OLE 2.0) zavádí základní standardní tiskové rozhraní , IPrintobecně dostupné prostřednictvím libovolného objektu, který může načíst trvalý stav typu dokumentu. Každé zobrazení aktivního dokumentu může volitelně podporovat IPrint rozhraní, aby bylo možné tyto možnosti poskytnout.

Rozhraní IPrint je definováno takto:

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

Klienti a kontejnery jednoduše používají IPrint::Print pokyn, aby se dokument po načtení dokumentu vytiskl, zadali příznaky ovládacího prvku tisku, cílové zařízení, stránky k tisku a další možnosti. Klient může také řídit pokračování tisku prostřednictvím rozhraní IContinueCallback (viz níže).

Kromě toho IPrint::SetInitialPageNum podporuje možnost tisknout řadu dokumentů jako jednu bez problémů číslování stránek, což je samozřejmě výhoda pro aktivní kontejnery dokumentů, jako je Office Binder. IPrint::GetPageInfo usnadňuje zobrazování informací o stránkování tím, že volajícímu umožníte načíst počáteční číslo stránky, které SetInitialPageNum bylo dříve předáno (nebo interní výchozí počáteční číslo stránky dokumentu) a počet stránek v dokumentu.

Objekty, které podporují IPrint , jsou označené v registru pomocí klíče Printable uloženého pod CLSID objektu:

HKEY_CLASSES_ROOT\CLSID\{...} \Tisknutelné

IPrint je obvykle implementován ve stejném objektu, který podporuje nebo IPersistFile IPersistStorage. Volající si všimněte možnosti programového tisku trvalého stavu některé třídy vyhledáním klíče "Tisknutelného" v registru. V současné době "Tisknutelné" označuje podporu alespoň IPrint; další rozhraní mohou být definována v budoucnu, což by pak bylo k dispozici prostřednictvím QueryInterface toho, kde IPrint jednoduše představuje základní úroveň podpory.

Během tiskové procedury můžete chtít, aby klient nebo kontejner, který tisk inicioval, ovládal, zda má tisk pokračovat nebo ne. Kontejner může například podporovat příkaz "Stop Print", který by měl ukončit tiskovou úlohu co nejdříve. Aby bylo možné tuto funkci podporovat, klient tisknutelného objektu může implementovat malý objekt jímky oznámení s rozhraním IContinueCallback:

interface IContinueCallback : IUnknown
    {
    HRESULT FContinue(void);
    HRESULT FContinuePrinting(
        [in] LONG cPagesPrinted,
        [in] LONG nCurrentPage,
        [in] LPOLESTR pszPrintStatus);
    };

Toto rozhraní je navržené tak, aby bylo užitečné jako obecná funkce zpětného volání pro pokračování, která využívá různé procedury pokračování v rozhraní API win32 (například AbortProc pro tisk a výčet metasouboru EnumMetafileProc ). Proto je tento návrh rozhraní užitečný v široké škále časově náročných procesů.

Ve většině obecných případů IContinueCallback::FContinue se funkce pravidelně volá libovolným zdlouhavým procesem. Objekt jímky vrátí S_OK pokračovat v operaci a S_FALSE postup co nejdříve zastavit.

FContinuevšak není používán v kontextu IPrint::Print; spíše tisk používá IContinueCallback::FContinuePrint. Každý tiskový objekt by měl pravidelně volat FContinuePrinting předání počtu stránek, které byly vytištěny, počet vytištěných stránek a další řetězec popisující stav tisku, který se může klient rozhodnout zobrazit uživateli (například "Strana 5 z 19").

Viz také

Kontejnery pro aktivní dokument