Partilhar via


Arquitetura de pré-visualização de impressão

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

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

O processo de visualização de impressão

Quando o usuário seleciona o comando Visualizar impressão no menu Arquivo , a estrutura cria um CPreviewDC objeto. Sempre que seu aplicativo executa uma operação que define uma característica do contexto do dispositivo da impressora, a estrutura também executa uma operação semelhante no contexto do dispositivo da tela. Por exemplo, se seu aplicativo seleciona uma fonte para impressão, a estrutura seleciona uma fonte para exibição na tela que simula a fonte da impressora. Sempre que seu aplicativo enviaria a saída para a impressora, a estrutura enviaria a saída para a tela.

A visualização de impressão também difere da impressão na ordem em que cada um desenha as páginas de um documento. Durante a impressão, o framework executa um loop de impressão até que um determinado intervalo de páginas tenha sido renderizado. Durante a visualização de impressão, uma ou duas páginas são exibidas a qualquer momento e, em seguida, o aplicativo aguarda; Nenhuma outra página é exibida até que o usuário responda. Durante a pré-visualização de impressão, a aplicação também deve responder às mensagens WM_PAINT, assim como faz durante a exibição de tela comum.

A função CView::OnPreparePrinting é chamada quando o modo de visualização é invocado, assim como no início de um trabalho de impressão. A estrutura CPrintInfo Structure 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 o membro m_nNumPreviewPages para especificar se deseja visualizar o documento no modo de uma ou duas páginas.

Modificar a Pré-visualização de Impressão

Você pode modificar o comportamento e a aparência da visualização de impressão de várias maneiras com bastante facilidade. Por exemplo, você pode, entre outras coisas:

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

  • Faça com que a visualização de impressão mantenha a posição do usuário no documento iniciando sua exibição na página atual.

  • Faça com que uma inicialização diferente seja executada para pré-visualização de impressão e impressão.

  • Faça com que a visualização de impressão exiba números de página nos seus formatos personalizados.

Se souberes qual é o comprimento do documento e chamares SetMaxPage com o valor apropriado, o framework pode utilizar essa informação no modo de visualização, bem como durante a impressão. Uma vez que a estrutura sabe o comprimento do documento, ela pode fornecer a janela de visualização com uma barra de rolagem, permitindo que o usuário percorra o documento no modo de visualização. Se você não tiver definido o comprimento do documento, a estrutura não poderá posicionar a caixa de rolagem para indicar a posição atual, portanto, a estrutura não adicionará uma barra de rolagem. Nesse caso, o usuário deve usar os botões Próxima Página e Página Anterior na barra de controle da janela de visualização para percorrer o documento.

Para pré-visualização de impressão, poderá achar útil atribuir um valor ao membro m_nCurPage de CPrintInfo, mesmo que nunca o faça para impressão comum. Durante a impressão normal, esse membro carrega informações da estrutura para sua classe de exibição. É assim que a estrutura informa à exibição qual página deve ser impressa.

Por outro lado, quando o modo de visualização de impressão é iniciado, o membro m_nCurPage carrega informações na direção oposta: da visualização para a estrutura. A estrutura usa o valor desse membro para determinar qual página deve ser visualizada primeiro. O valor padrão desse membro é 1, portanto, a primeira página do documento é exibida inicialmente. Você pode substituir OnPreparePrinting para ajustar este membro ao número da página que está a ser visualizada no momento em que foi invocado o comando Pré-visualização de Impressão. Desta forma, o aplicativo mantém a posição atual do usuário ao passar do modo de exibição normal para o modo de visualização de impressão.

Às vezes, você pode querer OnPreparePrinting executar uma inicialização diferente, dependendo se ela é chamada para um trabalho de impressão ou para visualização de impressão. Você pode determinar isso examinando a variável de membro m_bPreview na CPrintInfo estrutura. Este membro é definido como TRUE quando a visualização de impressão é invocada.

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

Ver também

Impressão e Pré-visualização de Impressão
Impressão
Classe CView
Classe CDC