Esta anotação descreve o processo de personalização de impressão e Visualizar impressão e descreve os efeitos das rotinas de retorno de chamada usados na CView e o retorno de chamada rotinas e funções de membro de CPreviewView.
O problema
MFC fornece uma solução completa para a maioria dos impressão e precisa de Visualizar de imprimir. Na maioria dos casos, pouco código adicional é necessário para ter uma visão capaz de imprimir e visualizar. No entanto, há maneiras de otimizar a impressão que exigem esforço significativo por parte do desenvolvedor, e alguns aplicativos precisam adicionar elementos de interface do usuário específico para o modo de visualização de impressão.
Impressão eficiente
Quando um aplicativo do MFC imprime usando os métodos padrão, o Windows direciona todas as chamadas de saída de Interface gráfica de dispositivo (GDI) para um metarquivo na memória. Quando EndPage é chamado, Windows joga o metarquivo uma vez para cada faixa físico que requer que a impressora para imprimir uma página. Durante esse processamento, GDI freqüentemente consulta o procedimento anular para determinar se ele deve continuar. Normalmente o procedimento de anular permite que mensagens a serem processadas para que o usuário pode anular o trabalho de impressão usando uma caixa de diálogo de impressão.
Infelizmente, isso pode diminuir o processo de impressão. Se a impressão em seu aplicativo deve ser mais rápida do que pode ser conseguido usando a técnica padrão, você deve implementar a faixa manual.
Imprimir faixas
A banda manualmente, você deve re implementar o loop de impressão de modo que OnPrint é chamado múltiplo vezes por página (uma vez por banda). O loop de impressão é implementado no OnFilePrint função em viewprnt. No seu CView-derivada de classe, você sobrecarregar esta função para que a entrada de mapa de mensagem para manipular o comando Imprimir chama sua função de impressão. Copiar OnFilePrint rotina e alterar o loop de impressão para implementar a faixa. Você provavelmente também deseja passar o Retangular de bandas para suas funções de impressão para que você possa otimizar o desenho com base na seção da página sendo impressa.
Em segundo lugar, você deve chamar freqüentemente QueryAbort ao desenho da banda. Caso contrário, o procedimento de anular não será chamado e o usuário não poderá cancelar o trabalho de impressão.
Imprimir Preview: Papel eletrônico com Interface do usuário
Pré-visualizar, em essência, tenta ativar a exibição em uma emulação de uma impressora. Por padrão, a área cliente da janela principal é usada para exibir uma ou duas páginas totalmente dentro da janela. O usuário é capaz de aumentar o zoom em uma área da página para vê-lo mais detalhadamente. Com suporte adicional, o usuário ainda pode ser autorizado para editar o documento no modo de visualização.
Personalizando a visualização de impressão
Esta anotação apenas lida com um aspecto da modificação de Visualizar de imprimir: adição de interface do usuário para o modo de visualização. Outras modificações são possíveis, mas essas alterações são fora do escopo desta discussão.
Resumidamente, o processo de adição de interface do usuário para o modo de visualização é a:
OnFilePrintPreview
Isso é o manipulador de comando Visualizar de imprimir. Sua implementação padrão é:
privatevoid CView::OnFilePrintPreview()
{
nbsp; / / Em classes derivadas, implementar manipulação de janela especial aqui
/ / &Não se esqueça de janela de quadro desenganchar fechar se agarrado.
/ / não deve criar isso no quadro. Devem sobreviver a esta função
CPrintPreviewState * pState = CPrintPreviewState novo;
if (!.DoPrintPreview (AFX_IDD_PREVIEW_TOOLBAR, este,
RUNTIME_CLASS(CPreviewView), pState))
{
/ / Em classes derivadas, reverse manipulação de janela especial
/ / aqui para caso de falha de pré-visualização
TRACE0 ("erro: DoPrintPreview falhado");
AfxMessageBox(AFX_IDP_COMMAND_FAILURE);
Excluir pState; / / visualização falha ao inicializar, / / delete estado agora
}
}
DoPrintPreview ocultará o painel principal do aplicativo. Barras de controle, tais como a barra de status, podem ser retidas, especificando-os na pState-gt;Membro de dwStates (este é uma máscara de bits e bits para barras de Controlarar individual são definidas pelo AFX_CONTROLBAR_MASK(AFX_IDW_MYBAR)). A janela pState - >nIDMainPane é a janela que irá ser automaticamente oculta e reshown. DoPrintPreview , em seguida, irá criar uma barra de botões para o interface do usuário visualização padrão. Se for necessária a manipulação de janela especial, tal como para ocultar ou mostrar outras janelas, que devem ser feitas antes de DoPrintPreview é chamado.
Por padrão, quando termina de Visualizar de imprimir, ele retorna as barras de Controlarar para seus Estados originais e o painel principal para visível. Se manipulação especial é necessária, deve ser feito em uma Substituir do EndPrintPreview. Se DoPrintPreview falhar, também fornecer manipulação especial.
DoPrintPreview é chamado com:
&Notanbsp; Se uma exibição separada ou Exibir de classe é necessário para suporte de impressão, um ponteiro para esse objeto deve ser passado como o segundo parâmetro.
EndPrintPreview
Isso é chamado para encerrar o modo de Visualizar de imprimir. Muitas vezes é desejável para mover para a pá&gina no documento que última foi exibida na visualização de impressão. EndPrintPreview é chance do aplicativo para fazer isso. O pInfo-gt;membro m_nCurPage é a página que foi exibida (mais à esquerda se duas páginas foram exibidas), e o ponteiro é uma dica para onde o usuário estava interessado na página. Uma vez que a estrutura do modo de exibição do aplicativo é desconhecida para o quadro, o que você deve fornecer o código para mover para o ponto escolhido.
Você deve executar a maioria das ações antes de chamar CView::EndPrintPreview. Essa chamada inverte os efeitos de DoPrintPreview e exclui pView, pDC e pInfo.
/ / Qualquer limpeza adicional deve ser feita aqui.
CView::EndPrintPreview (pDC, pInfo, ponto, pView)
CWinApp::OnFilePrintSetup
Isso deve ser mapeado para o item de menu Configurar impressão. Na maioria dos casos, não é necessário substituir a implementação.
Nomenclatura de página
Outra questão é a de numeração de página e a ordem. Para aplicações do tipo processador de texto simples, esta é uma questão simples. A maioria dos sistemas de visualização de impressão assumir que cada página impressa corresponde a uma página do documento.
Na tentativa de fornecer uma solução generalizada, há várias coisas a considerar. Imagine um sistema de CAD. O usuário tem um desenho que abrange várias folhas de E-tamanho. Em um E-tamanho (ou em escala menor,) plotadora, numeração de páginas seria como no maiúscminúsc simples. Mas em uma impressora a laser, impressão de 16 páginas tamanho por folha, o que de visualização de impressão considerar uma "página"?
Como afirma o parágrafo introdutório, visualização de impressão está agindo como uma impressora. Portanto, o usuário verá o que viria da impressora específica que está seleccionada. É até o modo de exibição para determinar que imagem é impressa em cada página.
A Cadeia de caracteres de descrição de página da estrutura de CPrintInfo fornece um meio de exibir o número de página para o usuário, se ele pode ser representado como um número por página (como em "Página 1" ou "páginas 1-2"). Essa Cadeia de caracteres é usada pela implementação padrão de CPreviewView::OnDisplayPageNumber. Se uma exibição diferente for necessário, um pode substituir essa função virtual para fornecer, por exemplo, "Plan1, seções A, B".
Técnico anotações por número |nbsp; &Notas técnicas por categoria