Documentos de 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

  • Substituição de funções do modo de exibição de classe

  • Paginação

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

  • Paginação de time de impressão

O protocolo de impressão

Para imprimir um documento de várias páginas, a estrutura e o modo de exibição interagem da seguinte maneira.A estrutura exibida pela primeira vez o Impressão caixa de diálogo de , cria um contexto de dispositivo para a impressora e chama o StartDoc função de membro do CDC objeto.Em seguida, para cada página do documento, a estrutura chama o Página inicial função de membro do CDC objeto, instrui o objeto de exibição para imprimir a página e chamadas de EndPagefunção de membro .Se o modo de impressora deve ser alterado antes de iniciar uma página específica, o modo de exibição chama ResetDC, que atualiza o DEVMODE estrutura que contém as informações de modo nova impressora.Quando todo o documento foi impresso, a estrutura chama o EndDocfunção de membro .

Substituindo exibir classe funções

The CView classe define várias funções de membro são chamadas pela estrutura durante a impressão.Substituindo essas funções em sua classe de modo de exibição, você pode fornecer as conexões entre lógica de impressão da estrutura e lógica de impressão da classe seu 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 as fontes ou outros recursos GDI

OnPrepareDC

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

AoImprimir

Para imprimir uma página específica

OnEndPrinting

Para desalocar os recursos GDI

Você pode fazer o processamento relacionados à impressão de outras funções, bem, 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 CViewdo membro são chamadas de funções de impressão. O restante deste artigo explica a maioria destas etapas em mais detalhes.Partes adicionais do processo de impressão são descritas no artigo Alocando recursos GDI.

Repetir impressão

Paginação

O framework armazena grande parte das informações sobre um trabalho de impressão em um CPrintInfo estrutura.Vários dos valores da CPrintInfo pertencem a paginação; esses valores são acessíveis, sistema autônomo mostrado na tabela a seguir.

Número da página informações armazenadas no CPrintInfo

Variável de membro ou

função nome (s)

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 que está sendo impresso no momento

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

No início do processo de impressão, a estrutura chama 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, 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 chame SetMaxPage for the CPrintInfo estrutura antes de enviá-lo para DoPreparePrinting. Isso permite que você especificar o tamanho do documento.

DoPreparePrinting em seguida, exibe a caixa de diálogo Imprimir. Quando retornar, a CPrintInfo estrutura contém os valores especificados pelo usuário. Se o usuário deseja imprimir apenas um intervalo selecionado de páginas, ele ou ela poderá especificar inicial e final de números de página na caixa de diálogo Imprimir.A estrutura recupera esses valores usando o GetFromPage e GetToPage funções do 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 na sua classe de modo de exibição, OnPrepareDC and AoImprimir e passa cada função dois parâmetros: um ponteiro para um CDC objeto e um ponteiro para um CPrintInfo estrutura. Sempre que a estrutura chama OnPrepareDC e OnPrint, ele passa um valor diferente na m_nCurPage membro de CPrintInfo estrutura. Dessa forma a estrutura informa o modo de exibição a página que deve ser impresso.

The OnPrepareDCfunção de membro também é usada para exibição na tela.Faz ajustes para o contexto de dispositivo antes que ocorra de desenho.OnPrepareDC atende uma função semelhante na impressão, mas existem algumas diferenças: primeiro, a CDC objeto representa um contexto de dispositivo de impressora em vez de um contexto de dispositivo de tela e segundo, um CPrintInfo objeto é passado sistema autônomo um segundo parâmetro. (Este parâmetro é NULO when OnPrepareDC é chamado para exibição na tela.) Substituir OnPrepareDC Para fazer ajustes para o contexto de dispositivo com base em qual página está sendo impresso. Por exemplo, você pode mover a origem da porta de visualização e a região de recorte para garantir que a parte apropriada do documento é impresso.

The AoImprimirfunção de membro realiza a impressão real da página.O artigo Como impressão de padrão é concluído mostra como a estrutura chama OnDraw com um contexto de dispositivo de impressora para executar a impressão.Mais precisamente, a estrutura chama OnPrint com um CPrintInfo estrutura e um contexto de dispositivo, e OnPrint passa o contexto de dispositivo para OnDraw. Substituir OnPrint para executar qualquer renderização que deve ser feita 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, chame OnDraw de substituir do OnPrint Para fazer o renderização comuns de exibição na tela e impressão.

O fato de que OnDraw faz o renderização para os dois exibição na tela e impressão significa que seu aplicativo é WYSIWYG: "O que você consulte is what you get." No entanto, suponha que você não estiver escrevendo um aplicativo WYSIWYG.Por exemplo, considere um texto de editor que usa uma fonte em negrito para impressão, mas exibe códigos de controle para indicar o texto em negrito na tela.Em tal situação, você usar OnDraw estritamente para exibição na tela. Quando você substituir OnPrint, substitua a telefonar para OnDraw com uma telefonar 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 refere aos números de página, às vezes, é necessário distinguir entre 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 planilhas devem ser dobrados, 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.

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

Paginação de time 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 estiver WYSIWYG, portanto, tamanho do documento na tela não corresponde ao seu tamanho quando impresso.

Isso causa um problema quando você substituir OnPreparePrinting para sua classe de modo de exibição: Você não pode passar um valor para o SetMaxPage função dos 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 em usando 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 ao terminar.Sua classe de modo de exibição deve fazer para o participante do documento enquanto ele está sendo impresso e, em seguida, informe a estrutura quando é atingido o participante.

A estrutura se baseia em OnPrepareDC função a fim de informá-lo quando parar.Após cada telefonar para OnPrepareDC, a estrutura verifica um membro das CPrintInfo estrutura de telefonar m_bContinuePrinting. O valor padrão é TRUE. Desde que ele permaneça isso, a estrutura continua o loop de impressão.Se ele estiver definido como FALSE, a estrutura pára.Para realizar a paginação de time de impressão, substituir OnPrepareDC Para verificar se o participante do documento tem sido alcançado e conjunto m_bContinuePrinting para FALSE quando tem.

A implementação padrão de OnPrepareDC Define m_bContinuePrinting para FALSE se a página corrente 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 disso é que você deve ter cuidado se você telefonar a versão de classe base da OnPrepareDC. Não assuma que m_bContinuePrinting será TRUE após chamar a versão de classe base.

O que você deseja saber mais sobre?

Consulte também

Referência

Imprimindo

Classe CView

Classe CDC