Imprimir arquitetura de visualizaçã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 Microsoft Foundation Class define uma classe especial (não documentada) derivada da classe CDC chamada CPreviewDC
. Todos os objetos CDC
contêm dois contextos de dispositivo, mas geralmente são idênticos. Em um objeto CPreviewDC
, 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 de fato.
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 objeto CPreviewDC
. Sempre que o 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 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 enviar a saída para a impressora, a estrutura enviará 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 tenha sido renderizado. Durante a visualização de impressão, uma ou duas páginas são exibidas em um determinado momento e, em seguida, o aplicativo aguarda. Nenhuma página adicional será exibida 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, da mesma forma 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.
Modificar a visualização de impressão
Você pode modificar facilmente o comportamento e a aparência da visualização de impressão de várias maneiras. Por exemplo, você pode, entre outras coisas:
Fazer 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.
Fazer 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.
Fazer com que uma inicialização diferente seja executada para visualizar a impressão e imprimir.
Fazer com que a visualização de impressão exiba números de página em seus próprios formatos.
Se você souber quantas páginas o documento tem 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 número de páginas que tem o documento, ela poderá fornecer à janela de visualização uma barra de rolagem, permitindo que o usuário avance e retroceda as páginas no modo de visualização. Se você ainda não definiu o número de páginas do documento, a estrutura não poderá posicionar a caixa de rolagem para indicar a posição atual, e 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 as páginas do documento.
Para visualização de impressão, você pode achar útil atribuir um valor ao membro m_nCurPage do CPrintInfo
, mesmo que você nunca faça isso para a impressão comum. Durante a impressão comum, esse membro carrega informações da estrutura para sua classe de exibição. É dessa forma que a estrutura informa ao modo de 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: do modo de exibiçã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 definir esse membro como o número da página que está sendo exibida no momento em que o comando Visualizar Impressão foi invocado. Dessa 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 que OnPreparePrinting
execute uma inicialização diferente dependendo se ele é chamado 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 estrutura CPrintInfo
. Esse membro é definido como TRUE quando a visualização de impressão é invocada.
A estrutura CPrintInfo
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 "Página n" e "Páginas n - m", mas você pode modificar m_strPageDesc de dentro de OnPreparePrinting
e definir as cadeias de caracteres como algo mais elaborado. Consulte a Estrutura CPrintInfo na Referência do MFC para obter mais informações.
Confira também
Impressão e visualização de impressão
Imprimindo
Classe CView
Classe CDC