Compartilhar via


Arquitetura de 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 e impressão da 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 de Classes do Microsoft Foundation 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 é exibida.

O processo de visualização de impressão

Quando o usuário seleciona o comando Visualização de 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 de impressora, a estrutura também executa uma operação semelhante no contexto do dispositivo de tela. Por exemplo, se o aplicativo selecionar uma fonte para impressão, a estrutura selecionará uma fonte para exibição de tela que simula a fonte da impressora. Sempre que o aplicativo envia a saída para a impressora, a estrutura envia a saída para a tela.

A visualização de impressão também difere da impressão na ordem em que cada uma 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 seja 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; não serão exibidas mais páginas até que o usuário responda. Durante a visualização de impressão, o aplicativo também deve responder a 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 determinadas 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.

Modificando a visualização de impressão

Você pode modificar o comportamento e a aparência da visualização de impressão de várias maneiras facilmente. 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 visualização de impressão e impressão.

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

Se você souber por quanto tempo o documento está e chamar SetMaxPage com o valor apropriado, a estrutura poderá usar essas informações no modo de visualização, bem como durante a impressão. Depois que a estrutura souber o comprimento do documento, ela poderá fornecer a janela de visualização com uma barra de rolagem, permitindo que o usuário faça uma página para frente e para trás por meio do documento no modo de visualização. Se você ainda não definiu 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 Página Seguinte e Página Anterior na barra de controle da janela de visualização para percorrer o documento.

Para visualização de impressão, talvez você ache útil atribuir um valor ao membroCPrintInfom_nCurPage, mesmo que você nunca o faça para impressão comum. Durante a impressão comum, 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 exibição à 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 definir esse membro para o número da página que está sendo exibida no momento em que o comando visualização de impressão foi invocado. Dessa forma, o aplicativo mantém a posição atual do usuário ao mover do modo de exibição normal para o modo de visualização de impressão.

Às vezes, talvez você queira 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. Esse 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 em modos de página única e de várias páginas. Por padrão, essas cadeias de caracteres são do formato "Page n" e "Pages n - m", mas você pode modificar m_strPageDesc de dentro OnPreparePrinting e definir as cadeias de caracteres para algo mais elaborado. Consulte a estrutura CPrintInfo na referência MFC para obter mais informações.

Consulte também

Impressão e visualização de impressão
Impressão
Classe CView
Classe CDC