Programmgesteuerter Drucken
OLE stellte bedeutet, dauerhafte Dokumente (GetClassFile) eindeutig zu identifizieren und sie in den zugehörigen Code (CoCreateInstance, QueryInterface(IID_IPersistFile), QueryInterface(IID_IPersistStorage), IPersistFile::Load und IPersistStorage::Load) zu laden.Zum Drucken von Dokumenten zu aktivieren, führt Active Document-Einschluss (mithilfe eines vorhandenen OLE-Entwurfs ursprünglich nicht ausgeliefert mit OLE STANDARD Basis 2.0) ein, der Schnittstelle, IPrint in der Regel über jedes verfügbares - Objekt druckt das den permanenten Zustand des Dokumenttyps laden kann.Jede Ansicht eines aktiven Dokuments kann die IPrint optional Schnittstelle unterstützen, damit diese Funktionen bereitzustellen.
Die IPrint-Schnittstelle wird wie folgt definiert:
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);
};
Client- und Container IPrint::Print Verwendung einfach das Dokument anzuweisen, um einmal ausgegeben, dass das Dokument geladen und Drucken steuer Flags fest, das Zielgerät, die zu druckenden Seiten angibt und zusätzliche Optionen.Der Client kann die Fortsetzung des Drucks auch von der Schnittstelle IContinueCallback steuern (siehe unten).
Darüber hinaus unterstützt IPrint::SetInitialPageNum die Möglichkeit, mehrere Dokumente als eines zu druckenden Seiten nahtlos mit offensichtlich ein Vorteil für Active Document-Container wie Office-Sammelmappe nummeriert.IPrint::GetPageInfo macht, Paginierungsinformationen Anzeigen von einfach, indem es dem Aufrufer ermöglicht, die zuvor auf die Seitenzahl starten ( SetInitialPageNum übergeben oder die interne Standard- beginnen Seitenzahl des Dokuments) abzurufen und auf die Anzahl der Seiten im Dokument.
Objekte, die IPrint unterstützen, werden in der Registrierung mit dem Namen "druckbaren" Schlüssel markiert, die unter der CLSID des Objekts gespeichert werden:
HKEY_CLASSES_ROOT \ CLSID \ {…}\ Druckbar
IPrint wird normalerweise im selben Objekt implementiert, das entweder IPersistFile oder IPersistStorage unterstützt.Aufrufer sollten die Funktion, den permanenten Zustand einiger Klasse programmgesteuert zu drucken, indem sie in der Registrierung nach der "druckbaren" Schlüssels finden.Derzeit "druckbar" gibt die Unterstützung für mindestens IPrint an. weitere Schnittstellen sind in der Zukunft definiert werden, die anschließend von QueryInterface verfügbar sein, in dem IPrint einfach das Ausgangsniveau der Unterstützung darstellt.
Während einer Drucken der Prozedur sollten Sie den Client oder den Container, die den Druck initiierten, um zu steuern, ob der Druckvorgang fortgesetzt werden soll.Beispielsweise unterstützt einen Container kann der "STOPP- DRUCK" Befehl, der den Druckauftrag so schnell wie möglich beendet werden soll.Um diese Funktion zu unterstützen, kann der Client eines druckbaren Objekts ein kleines Benachrichtigung Objekt mit der Schnittstelle aufruft IContinueCallback implementieren:
interface IContinueCallback : IUnknown
{
HRESULT FContinue(void);
HRESULT FContinuePrinting(
[in] LONG cPagesPrinted,
[in] LONG nCurrentPage,
[in] LPOLESTR pszPrintStatus);
};
Diese Schnittstelle wurde entworfen, um als generische Fortsetzungs rückruffunktion hilfreich sein, die der verschiedenen Fortsetzungs Prozeduren in der Win32-API stattfindet (beispielsweise AbortProc für das Drucken und EnumMetafileProc für Metadateien Enumeration).Daher ist dieser Schnittstellen entwurf in einer Vielzahl von aufwändigen Prozedur sinnvoll.
In den Fällen ist die generischsten IContinueCallback::FContinue-Funktion in regelmäßigen Abständen alle längeren Prozess aufgerufen.Durch Senken Objekt gibt S_OK zurück, um den Vorgang fortzusetzen und S_FALSE, um die Prozedur so schnell wie möglich zu beenden.
FContinue wird nicht im Kontext IPrint::Print verwendet. IContinueCallback::FContinuePrint Druckvorgang nicht verwendet.Jedes Objekt zu FContinuePrinting muss regelmäßig aufrufen, die die Anzahl der Seiten gedruckt, die übergeben wird, die Seitenzahl, die gedruckt werden, und einer zusätzlichen Zeichenfolge, die den Druckvorgang beschreiben, den Status kann der Client auswählt, die dem Benutzer angezeigt wird (z "Seite 5 von 19 ").