Condividi tramite


Stampa a livello di codice

OLE fornisce i mezzi per identificare in modo univoco i documenti salvati (GetClassFile) e caricarli nel codice associato (CoCreateInstance, QueryInterface(IID_IPersistFile), QueryInterface(IID_IPersistStorage), IPersistFile::Loade IPersistStorage::Load).Per ulteriori inoltre consentire di stampare documenti, il contenimento del documento attivo (utilizzando una progettazione esistente OLE non fornita con OLE 2,0 originariamente) fornisce un'interfaccia di stampa di base-standard, IPrint, generalmente resa disponibili mediante qualsiasi oggetto che può caricare lo stato persistente i tipi di documento.Ogni visualizzazione del documento attivo possibile supportare l'interfaccia di IPrint per fornire queste funzionalità.

L'interfaccia di IPrint viene definita come segue:

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

};

I client e i contenitori utilizzano semplicemente IPrint::Print per indicare al documento per stamparsi una volta che il documento viene caricato, specificando i flag di controllo di stampa, il dispositivo di destinazione, le pagine da stampare e altre opzioni.Il client inoltre possibile controllare la continuazione di stampa tramite l'interfaccia IContinueCallback (vedere di seguito).

Inoltre, IPrint::SetInitialPageNum supporta la stampa una serie di documenti quando uno capo le pagine senza problemi, un vantaggio dei contenitori di documenti attivi sono direttamente il Raccoglitore microsoft Office.IPrint::GetPageInfo consente di visualizzare le informazioni di paginazione semplice consentendo al chiamante di recuperare il numero di pagina iniziale in precedenza passato a SetInitialPageNum (o il numero di pagina iniziale predefinito interno di documento) e il numero di pagine nel documento.

Gli oggetti che supportano IPrint vengono contrassegnati nel Registro di sistema nella chiave “stampabile„ archiviata nel CLSID dell'oggetto:

HKEY_CLASSES_ROOT \ CLSID \ {…}\ Stampabile

IPrint in genere viene implementato nello stesso oggetto che supporti IPersistFile o IPersistStorage.I chiamanti osservino le funzionalità a livello di codice per stampare lo stato persistente di classi vengono ricercati nel Registro di sistema per la chiave “stampabile„.Attualmente, “stampabile„ indica il supporto almeno a IPrint; altre interfacce possono essere definite in futuro che quindi sono disponibili con QueryInterface in cui IPrint rappresenta semplicemente il livello di base di supporto.

Durante la routine di stampa, è possibile utilizzare il client o nel contenitore che ha avviato la stampa per controllare se la stampa deve continuare.Ad esempio, il contenitore può supportare un comando “arresto stampa„ che deve terminare il processo di stampa il prima possibile.Per supportare questa funzionalità, il client di un oggetto stampabile possibile implementare un piccolo oggetto sink di notifica con l'interfaccia IContinueCallback:

interface IContinueCallback : IUnknown

{

HRESULT FContinue(void);

HRESULT FContinuePrinting(

[in] LONG cPagesPrinted,

[in] LONG nCurrentPage,

[in] LPOLESTR pszPrintStatus);

};

Questa interfaccia è progettata per essere utile come funzione di callback generica di continuazione che sostituisce le diverse procedure di continuazione nell'API Win32 (come AbortProc per la stampa e EnumMetafileProc per l'enumerazione di metafile).Pertanto questa progettazione di interfaccia è utile in un'ampia varietà di processi parecchio tempo.

Nei casi più generici, la funzione di IContinueCallback::FContinue è denominata periodicamente da qualsiasi lungo processo.L'oggetto sink restituisce S_OK per proseguire l'operazione e S_FALSE per interrompere la routine il prima possibile.

FContinue, tuttavia, non è utilizzato nel contesto di IPrint::Print; invece, la stampa utilizza IContinueCallback::FContinuePrint.Qualsiasi oggetto di stampa necessario chiamare periodicamente FContinuePrinting che passa il numero di pagine che stanno stampa, il numero di pagine che viene stampata e una stringa aggiuntiva che descrive lo stato di stampa che il client può scegliere di visualizzare all'utente (ad esempio “pagina 5 a 19 ").

Vedere anche

Concetti

Contenitore di documenti attivi