Arquitetura de visualização de impressão

Este artigo explica como a estrutura do MFC implementa a funcionalidade de visualização de impressão.Os tópicos abordados incluem:

  • Processo de visualização de impressão

  • Modificando a visualização de impressão

Visualização de impressão é um pouco diferente de impressão e exibição de tela porque, em vez de desenhar diretamente uma imagem em um dispositivo, o aplicativo deve simular a impressora usando a tela.Para acomodar isso, a biblioteca Microsoft Foundation Class define uma classe (não documentada) especial derivada de CDC Class, chamada CPreviewDC.Todos os CDC objetos contêm dois contextos de dispositivo, mas geralmente são idênticos.Em um CPreviewDC de objeto, eles são diferentes: o primeiro representa a impressora que está sendo simulada e o segundo representa a tela em que a saída realmente é exibida.

O processo de visualização de impressão

Quando o usuário seleciona o comando Visualizar impressão a partir de arquivo menu, o framework cria um CPreviewDC objeto.Sempre que seu aplicativo executa uma operação que define uma característica do contexto de dispositivo de impressora, a estrutura também realiza uma operação similar no contexto de dispositivo de tela.Por exemplo, se seu aplicativo seleciona uma fonte para impressão, o framework seleciona uma fonte para exibição de tela que simula a fonte de impressora.Sempre que seu aplicativo poderia enviar a saída para a impressora, a estrutura em vez disso, envia a saída para a tela.

Visualização da impressão também difere de impressão na ordem em que cada desenha as páginas de um documento.Durante a impressão, a estrutura continua um loop de impressão até que um determinado intervalo de páginas foi processado.Durante a visualização de impressão, uma ou duas páginas são exibidas em qualquer momento e o aplicativo aguarda; Não há mais páginas são exibidas até que o usuário responda.Durante a visualização de impressão, o aplicativo também deve responder a WM_PAINT mensagens, assim como faz durante a exibição de tela comum.

O CView::OnPreparePrinting função é chamada quando o modo de visualização é chamado, assim como é no início do trabalho de impressão.O Estrutura CPrintInfo estrutura passada para a função contém vários membros cujos valores você pode definir para ajustar certas características da operação de visualização de impressão.Por exemplo, você pode definir a m_nNumPreviewPages membro para especificar se deseja visualizar o documento no modo de página de uma ou duas páginas.

Modificando a visualização de impressão

Você pode modificar o comportamento e aparência da visualização de impressão em um número de maneiras bastante facilidade.Por exemplo, você pode, entre outras coisas:

  • Fazer com que a janela de visualização exibir uma barra de rolagem para facilitar o acesso a qualquer página do documento.

  • Visualização de impressão causa para manter a posição do usuário no documento, começando sua exibição na página atual.

  • Fazer inicialização diferente a ser executada para impressão e visualização de impressão.

  • Fazer com que a visualização de impressão exibir números de página em seus próprios formatos.

Se o documento quanto é e chamar SetMaxPage com o valor apropriado, o framework pode usar essas informações no modo de visualização, bem como durante a impressão.Depois que o framework sabe o tamanho do documento, ele pode fornecer a janela de visualização com um barra de rolamento, permitindo que o usuário percorrer o documento no modo de visualização e para trás.Se você não definir o comprimento do documento, a estrutura não pode posicionar a caixa de rolagem para indicar a posição atual, para que a estrutura não adiciona uma barra de rolagem.Nesse caso, o usuário deve usar os botões de página anterior e próxima página na barra de controle da janela de visualização para percorrer o documento.

Visualização de impressão, você talvez ache útil para atribuir um valor para o m_nCurPage membro do CPrintInfo, mesmo que você nunca faria isso para impressão comum.Durante a impressão comum, este membro transporta informações do framework para sua classe de modo de exibição.Isso é como a estrutura informa o modo de exibição que página deve ser impresso.

Por outro lado, quando o modo de visualização de impressão é iniciado, o m_nCurPage membro transporta informações na direção oposta: no modo de exibição para o framework.A estrutura usa o valor desse membro para determinar qual página deve ser visualizada primeiro.O valor padrão deste membro é 1, portanto a primeira página do documento é exibida inicialmente.Você pode substituir OnPreparePrinting para definir esse membro como o número da página sendo visualizada no momento foi invocado o comando Visualizar impressão.Dessa forma, o aplicativo mantém a posição atual do usuário quando movendo de modo de exibição normal para o modo de visualização de impressão.

Às vezes convém OnPreparePrinting para executar inicialização diferente dependendo se ele for chamado para um trabalho de impressão ou visualização de impressão.Você pode determinar isso examinando o m_bPreview variável de membro na CPrintInfo estrutura.Esse membro é definido como TRUE quando a visualização de impressão é invocada.

O CPrintInfo estrutura também contém um membro chamado m_strPageDesc, que é usado para formatar seqüências de caracteres exibidas na parte inferior da tela em modos de página única e de várias páginas.Por padrão essas cadeias de caracteres são do formulário "página n" e "páginas n - m, "mas você pode modificar m_strPageDesc do OnPreparePrinting e defina as seqüências de caracteres para algo mais elaborado.Consulte Estrutura CPrintInfo na Referência MFC para obter mais informações.

Consulte também

Referência

Impressão e visualizar impressão

Imprimindo

Classe CView

CDC Class