Compartilhar via


Impressão através de programação

OLE fornecidas os meios para identificar exclusivamente os documentos persistentes (GetClassFile) e carregá-los no seu código associado (CoCreateInstance, QueryInterface(IID_IPersistFile), QueryInterface(IID_IPersistStorage), IPersistFile:: Load, e IPersistStorage::Load).Para ativar ainda mais a impressão de documentos, o confinamento de documento ativo (usando um design OLE existente não fornecido com o OLE 2.0 originalmente) apresenta uma interface de impressão padrão de base, IPrint, geralmente disponíveis através de qualquer objeto que pode carregar o estado persistente do tipo de documento.Cada modo de exibição de um documento ativo pode, opcionalmente, suporte a IPrint interface para fornecer esses recursos.

O IPrint interface é definida da seguinte maneira:

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

};

Clientes e recipientes simplesmente usam IPrint para instruir o documento para imprimir próprio depois que o documento é carregado, especificando sinalizadores de controle de impressão, o dispositivo de destino, as páginas para imprimir e opções adicionais.O cliente também pode controlar a continuação de impressão através da interface IContinueCallback (veja abaixo).

Além disso, IPrint::SetInitialPageNum suporta a capacidade de imprimir uma série de documentos como perfeitamente, obviamente, numeração de páginas um benefício para recipientes do documento ativo como Office Binder.IPrint::GetPageInfo torna exibindo informações de paginação simples, permitindo que o chamador recuperar inicial página número anteriormente passado para SetInitialPageNum (ou padrão interno do documento número da página inicial) e o número de páginas no documento.

Objetos com suporte IPrint marcados no registro com a chave de "Printable" armazenada no CLSID do objeto:

HKEY_CLASSES_ROOT\CLSID\ {...}\Printable

IPrintgeralmente é implementado no mesmo objeto oferece suporte a IPersistFile ou IPersistStorage.Chamadores Observe a capacidade de imprimir programaticamente o estado persistente de alguma classe procurando no registro para a chave de "Printable".Atualmente, "Imprimível" indica suporte pelo menos IPrint; outras interfaces podem ser definidas no futuro que então estaria disponível por meio de QueryInterface onde IPrint simplesmente representa o nível de base de suporte.

Durante um procedimento de impressão, convém o cliente ou contêiner que iniciou a impressão de controlar ou não deve continuar a impressão.Por exemplo, o recipiente pode oferecer suporte a um comando "Stop imprimir" que deve terminar o trabalho de impressão assim que possível.Para oferecer suporte a esse recurso, o cliente de um objeto imprimível pode implementar um objeto de coletor pequeno notificação com a interface IContinueCallback:

interface IContinueCallback : IUnknown

{

HRESULT FContinue(void);

HRESULT FContinuePrinting(

[in] LONG cPagesPrinted,

[in] LONG nCurrentPage,

[in] LPOLESTR pszPrintStatus);

};

Essa interface é projetada para ser útil como uma função de retorno de chamada de continuação genérico que ocupa o lugar de vários procedimentos de continuação na API Win32 (como o AbortProc para impressão e o EnumMetafileProc para enumeração de metarquivo).Assim, esse design de interface é útil em uma ampla variedade de processos demorados.

Em casos mais genéricos, o IContinueCallback::FContinue função é chamada periodicamente por qualquer processo demorado.Retorna o objeto sink S_OK para continuar a operação e S_FALSE para interromper o procedimento assim que possível.

FContinue, Entretanto, não é usado no contexto de IPrint; impressão em vez disso, usa IContinueCallback::FContinuePrint.Qualquer objeto impressão periodicamente deve chamar FContinuePrinting passando o número de páginas que têm sido impressão, o número da página que está sendo impresso e uma seqüência de caracteres adicional descrevendo o status de impressão que o cliente pode optar por exibir para o usuário (como "página 5 de 19").

Consulte também

Conceitos

Recipientes de documento ativa