Impressão através de programação
OLE fornecido os meios para identificar exclusivamente documentos persistentes (GetClassFile) e carregue-os em seu código associado (CoCreateInstance, QueryInterface(IID_IPersistFile), QueryInterface(IID_IPersistStorage), IPersistFile:: Load, and IPersistStorage::Load).Para ativar a impressão de documentos ainda mais, contenção do documento ativo (usando um design existente do OLE não fornecido originalmente com OLE 2.0) apresenta uma interface de impressão padrão de base, IPrint, geralmente disponível por meio de qualquer objeto que pode carregar o estado persistente do tipo de documento. Cada modo de exibição de um documento ativo, opcionalmente, pode oferecer suporte a IPrint interface para fornecer esses recursos.
The IPrint interface é definida sistema autônomo 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);
};
Os clientes e recipientes simplesmente usam IPrint::Print para instruir o documento para imprimir próprio assim que esse documento é carregado, especificando os sinalizadores de controle de impressão, o dispositivo de destino, as páginas a serem impressas e outras opções.O cliente também pode controle a continuação da impressão através da interface IContinueCallback (veja abaixo).
Além disso, IPrint::SetInitialPageNum oferece suporte à capacidade de imprimir uma série de documentos sistema autônomo um, numeração diretamente, páginas, obviamente, um benefício para recipientes do documento ativo sistema autônomo o Office Binder.IPrint::GetPageInfo simplifica exibindo informações de paginação, permitindo que o chamador recuperar o número da página inicial 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 que ofereçam suporte a IPrintestão marcados no registro com a chave "Printable" armazenada no CLSID do objeto:
HKEY_CLASSES_ROOT\CLSID\{...}\Printable
IPrint geralmente é implementado no mesmo objeto que ofereça suporte a qualquer uma IPersistFile ou IPersistStorage. Os chamadores Observe a capacidade de imprimir o estado persistente de alguma classe programaticamente observando o registro para a chave "Printable".Atualmente, "Printable" indica suporte pelo menosIPrint; outras interfaces podem ser definidos no futuro que, em seguida, estaria disponível por meio de QueryInterface onde IPrint simplesmente representa o nível básico de suporte.
Durante um procedimento de impressão, convém o cliente ou o contêiner que iniciou a impressão para controlar ou não deve continuar a impressão.Por exemplo, o contêiner pode oferecer suporte a um comando "Imprimir parar" que deve terminar o trabalho de impressão sistema autônomo logo sistema autônomo possíveis.Para oferecer suporte a esse recurso, o cliente de um objeto imprimível pode implementar um objeto de coletor pequena 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 sistema autônomo uma função de retorno de chamada de continuação genérico que ocupa o lugar dos vários procedimentos de continuação na API Win32 (sistema autônomo a 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.
Nos casos mais genéricos, a IContinueCallback::FContinue função é chamada periodicamente por qualquer processo demorado.O objeto coletor retorna S_OK Para continuar a operação e S_FALSE para interromper o procedimento assim que possível.
FContinue, no entanto, não é usado no contexto de IPrint::Print; em vez disso, a impressão usa IContinueCallback::FContinuePrint.Qualquer objeto de impressão deve perioditelefonary telefonar FContinuePrinting passando o número de páginas que tenham sido imprimindo, o número da página que está sendo impresso e uma seqüência de caracteres adicional que descrevem o status de impressão que o cliente pode escolher exibir para o usuário (sistema autônomo "página 5 19").