Partilhar via


Documentos com várias páginas

Este artigo descreve o protocolo de impressão do Windows e explica como imprimir documentos que contenham mais de uma página.O artigo aborda os seguintes tópicos:

  • Protocolo de impressão

  • Substituindo funções de classe de modo de exibição

  • Paginação

  • Impressora páginas vs.páginas do documento

  • Paginação de tempo de impressão

O protocolo de impressão

Para imprimir um documento de várias páginas, a estrutura e o modo de interagem da seguinte maneira.Primeiro exibe a estrutura de Imprimir caixa de diálogo cria um contexto de dispositivo para a impressora e chamadas a StartDoc função de membro a CDC objeto.Em seguida, para cada página do documento, a estrutura chama o StartPage função de membro de CDC objeto, instrui o objeto de exibição para imprimir a página e chamadas o página final função de membro.Se o modo da impressora deve ser alterado antes de iniciar uma página específica, o modo de exibição chama ResetDC, as atualizações que o DEVMODE estrutura que contém as novas informações de modo de impressora.Quando todo o documento foi impresso, a estrutura chamará o EndDoc função de membro.

Substituindo funções de classe de modo de exibição

O CView classe define várias funções de membro que são chamadas pelo framework durante a impressão.Substituindo essas funções em sua classe de modo de exibição, você deve fornecer as conexões entre a lógica de impressão da estrutura e a lógica de impressão da sua classe de modo de exibição.A tabela a seguir lista essas funções de membro.

Funções Overridable do CView para impressão

Nome

Motivo da substituição

OnPreparePrinting

Para inserir valores na caixa de diálogo Imprimir, especialmente o comprimento do documento

OnBeginPrinting

Para alocar fontes ou outros recursos GDI

OnPrepareDC

Para ajustar os atributos de contexto de dispositivo para uma determinada página ou fazer a paginação de tempo de impressão

AoImprimir

Para imprimir uma determinada página

OnEndPrinting

Para desalocar recursos GDI

Você pode fazer o processamento relacionados à impressão de outras funções também, mas essas funções são aqueles que orientam o processo de impressão.

A figura a seguir ilustra as etapas envolvidas no processo de impressão e mostra onde cada um dos CViewde impressão são chamadas de funções de membro.O restante deste artigo explica a maioria dessas etapas mais detalhadamente.Partes adicionais do processo de impressão são descritas no artigo Alocando recursos GDI.

O Loop de impressão

Procedimento de Loop de impressão

Paginação

O framework armazena muitas das informações sobre um trabalho de impressão em um CPrintInfo estrutura.Vários valores em CPrintInfo pertencem a paginação; Esses valores são acessíveis como mostrado na tabela a seguir.

Informações de número de página armazenadas em CPrintInfo

Variável de membro ou

nomes de função

Número de página referenciado

GetMinPage/SetMinPage

Primeira página do documento

GetMaxPage/SetMaxPage

Última página do documento

GetFromPage

Primeira página a ser impressa

GetToPage

Última página a ser impressa

m_nCurPage

Página sendo impressa

Início de números de página em 1, ou seja, a primeira página é numerada 1, 0 não.Para obter mais informações sobre esses e outros membros da CPrintInfo, consulte o Referência MFC.

No início do processo de impressão, a estrutura chama o modo de exibição OnPreparePrinting função de membro, passando um ponteiro para um CPrintInfo estrutura.O Assistente de aplicativo fornece uma implementação de OnPreparePrinting que chama DoPreparePrinting para acionar, outra função de membro de CView.DoPreparePrintingé a função que exibe a caixa de diálogo Imprimir e cria um contexto de dispositivo de impressora.

Neste ponto, o aplicativo não sabe quantas páginas estão no documento.Ele usa os valores padrão 1 e 0xFFFF para os números da primeira e última página do documento.Se você souber quantas páginas o documento tiver, substituir OnPreparePrinting e chamar SetMaxPage para o CPrintInfo estrutura antes de enviá-lo para DoPreparePrinting.Isso permite que você especifique o comprimento do documento.

DoPreparePrintingExibe a caixa de diálogo Imprimir.Quando retorna, o CPrintInfo estrutura contém os valores especificados pelo usuário.Se o usuário desejar imprimir apenas um intervalo de páginas selecionado, ele ou ela pode especificar o início e término números de página na caixa de diálogo Imprimir.A estrutura recupera esses valores usando o GetFromPage e GetToPage funções de CPrintInfo.Se o usuário não especificar um intervalo de páginas, a estrutura chama GetMinPage e GetMaxPage e usa os valores retornados para imprimir o documento inteiro.

Para cada página de um documento a ser impresso, a estrutura chama duas funções de membro em sua classe de modo de exibição OnPrepareDC e AoImprimire passa a cada função de dois parâmetros: um ponteiro para um CDC objeto e um ponteiro para um CPrintInfo estrutura.Cada vez que as chamadas de estrutura OnPrepareDC e OnPrint, ele passa um valor diferente do m_nCurPage membro do CPrintInfo estrutura.Dessa forma a estrutura informa o modo de exibição que página deve ser impresso.

O OnPrepareDC função de membro também é usada para exibição na tela.Faz ajustes para o contexto de dispositivo antes de desenho ocorre.OnPrepareDCserve a uma função similar na impressão, mas há algumas diferenças: primeiro, o CDC objeto representa um contexto de dispositivo de impressora em vez de um contexto de dispositivo de tela e, segundo, um CPrintInfo objeto é passado como um segundo parâmetro.(Este parâmetro é Nulo quando OnPrepareDC é chamado para exibição na tela.) Substituir OnPrepareDC fazer ajustes para o contexto de dispositivo com base em qual página está sendo impresso.Por exemplo, você pode mover a origem de visor e a região de recorte para garantir que a parte apropriada do documento impresso.

O AoImprimir função de membro executa a impressão real da página.O artigo Como padrão impressão é feito mostra como o framework chama OnDraw com um contexto de dispositivo de impressora para realizar a impressão.Mais precisamente, as chamadas de estrutura OnPrint com um CPrintInfo estrutura e um contexto de dispositivo, e OnPrint passa o contexto de dispositivo OnDraw.Substituir OnPrint para executar qualquer processamento deve ser feito somente durante a impressão e não para exibição na tela.Por exemplo, para Imprimir cabeçalhos ou rodapés (consulte o artigo cabeçalhos e rodapés para obter mais informações).Em seguida, chamar OnDraw de substituição do OnPrint para fazer o processamento comum de tela e impressão.

O fato de que OnDraw faz o processamento para ambas a tela e impressão significa que seu aplicativo é WYSIWYG: "que você vê é o que você obtém." No entanto, suponha que você não estiver escrevendo um aplicativo WYSIWYG.Por exemplo, considere um texto editor que usa uma fonte em negrito para impressão, mas exibe códigos de controle para indicar o texto em negrito na tela.Situação, use OnDraw estritamente para exibição na tela.Quando você substituir OnPrint, substituir a chamada para OnDraw com uma chamada para uma função de desenho separada.Essa função desenha o documento a maneira como ele aparece no papel, usando os atributos não exibir na tela.

Impressora páginas vs.Páginas do documento

Quando você se referir a números de página, às vezes é necessário distinguir entre o conceito da impressora de uma página e o conceito de um documento de uma página.Do ponto de vista da impressora, uma página é uma folha de papel.No entanto, uma folha de papel não é necessariamente igual uma página do documento.Por exemplo, se você estiver imprimindo um boletim informativo, onde as folhas são dobrado, uma folha de papel pode conter tanto as primeira e última páginas do documento, lado a lado.Da mesma forma, se você estiver imprimindo uma planilha, o documento não conter páginas em todos os.Em vez disso, uma folha de papel pode conter linhas de 1 a 20, colunas de 6 a 10.

A página todos os números na CPrintInfo estrutura Consulte páginas da impressora.O framework chama OnPrepareDC e OnPrint uma vez para cada folha de papel que irá passar pela impressora.Quando você substituir o OnPreparePrinting função para especificar o comprimento do documento, você deve usar páginas da impressora.Se houver uma correspondência igual (isto é, uma página de impressora a uma página do documento), e isso é fácil.Se, por outro lado, documentos e páginas de impressora não correspondem diretamente, você deve converter entre eles.Por exemplo, considere a possibilidade de imprimir uma planilha.Ao substituir OnPreparePrinting, você deve calcular quantas folhas de papel serão necessárias para imprimir toda a planilha e, em seguida, usar esse valor quando chamar o SetMaxPage função de membro CPrintInfo.Da mesma forma, ao substituir OnPrepareDC, você deve traduzir m_nCurPage no intervalo de linhas e colunas que aparecerão nessa planilha específica e ajustar a origem de Visor de acordo.

Paginação de tempo de impressão

Em algumas situações, sua classe de modo de exibição pode não saber antecipadamente quanto tempo o documento é até que realmente foi impressa.Por exemplo, suponha que seu aplicativo não for WYSIWYG, portanto, comprimento do documento na tela não corresponde ao seu comprimento quando impresso.

Isso causa um problema quando você substituir OnPreparePrinting para sua classe de modo de exibição: não é possível passar um valor para o SetMaxPage função do CPrintInfo estrutura, porque você não sabe o tamanho de um documento.Se o usuário não especificar um número de página para parar de usar a caixa de diálogo Imprimir, a estrutura não sabe quando parar o loop de impressão.É a única maneira de determinar quando parar o loop de impressão imprimir o documento e ver quando ela termina.Sua classe de modo de exibição deve verificar o final do documento enquanto ele está sendo impresso e informar sobre a estrutura quando é atingido o fim.

A estrutura depende de sua classe de modo de exibição OnPrepareDC função para informá-lo quando parar.Após cada chamada para OnPrepareDC, a estrutura verifica um membro do CPrintInfo estrutura chamada m_bContinuePrinting.O valor padrão é TRUE. Como ele permanece para que o framework continua o loop de impressão.Se for definido como FALSE, o framework pára.Para realizar a paginação de tempo de impressão, substituir OnPrepareDC para verificar se o final do documento foi atingido e definir m_bContinuePrinting para FALSE quando tem.

A implementação padrão de OnPrepareDC define m_bContinuePrinting para FALSE se a página atual for maior que 1.Isso significa que, se o comprimento do documento não foi especificado, a estrutura pressupõe que o documento é uma página longa.Uma conseqüência é que você deve ter cuidado se você chamar a versão de classe base do OnPrepareDC.Não assuma que m_bContinuePrinting será TRUE depois de chamar a versão de classe base.

w7wzay73.collapse_all(pt-br,VS.110).gifO que você deseja saber mais sobre?

Consulte também

Referência

Imprimindo

Classe CView

CDC Class