Compartir a través de


Documentos de varias páginas

En este artículo se describe Windows que imprime protocolo y explica cómo imprimir documentos que contienen más de una página.El artículo se tratan los siguientes temas:

  • Protocolo de impresión

  • Reemplazar funciones de clase de vista

  • Paginación

  • Páginas de la impresora con.páginas de un documento

  • Paginación de IMPR-Tiempo

El protocolo de impresión

Para imprimir un documento de varias páginas, el marco y la vista interactivos de la manera siguiente.Primero el marco muestra el cuadro de diálogo de Imprimir , crea un contexto para la impresora, y llama a la función miembro de StartDoc del objeto de CDC .A continuación, cada página del documento, el marco pide la función miembro de StartPage del objeto de CDC , indica al objeto de vista para imprimir la página, y llama a la función miembro de EndPage .Si el modo impresora debe cambiar antes de iniciar una página específica, la vista llama ResetDC, que actualiza la estructura de DEVMODE que contiene la nueva información de modo impresora.Cuando se ha imprimir todo el documento, el marco de trabajo llama a la función miembro de EndDoc .

Reemplazar funciones de clase de vista

La clase de CView define varias funciones miembro que son llamadas por el marco durante la impresión.Reemplazar estas funciones en la clase de vista, proporciona las conexiones entre la lógica que imprime de marco y la lógica de impresión de su clase de vista.La tabla siguiente se muestran estas funciones miembro.

Overridable CView funciona para imprimir

Name

Motivo de reemplazar

OnPreparePrinting

Para insertar valores en el cuadro de diálogo imprimir, especialmente la longitud del documento

OnBeginPrinting

Para asignar las fuentes u otros recursos de GDI

OnPrepareDC

Para ajustar los atributos de contexto para una página determinada, o hacer la paginación de IMPR-Tiempo

OnPrint

Para imprimir una página determinada

OnEndPrinting

Para desasignar los recursos de GDI

Puede realizar el procesamiento impresión-relacionado en otras funciones también, pero estas funciones son las que controlan el proceso de impresión.

La siguiente ilustración muestra los pasos implicados en el proceso de impresión y muestra donde cada una de las funciones miembro de impresión de los entity_CODECView se denomina.El resto de este artículo se explica la mayoría de estos pasos con más detalle.Las partes adicionales del proceso de impresión se describen en el caso Asignar recursos de GDI.

El bucle de impresión

Procedimiento de bucle de impresión

Paginación

El marco almacena gran parte de la información de un trabajo de impresión en una estructura de CPrintInfo .Algunos de los valores de CPrintInfo pertenecen a la paginación; estos valores son accesibles como se muestra en la tabla siguiente.

Información de número de página almacenada en CPrintInfo

Variable miembro o

nombres de función

Número de página hace referencia

GetMinPage/SetMinPage

Primera página del documento

GetMaxPage/SetMaxPage

Última página del documento

GetFromPage

Primera página que se imprimirá

GetToPage

Última página que se imprimirá

m_nCurPage

Página que es impresa actualmente

Los números de página comienzan en 1, es decir, la primera página se numera 1, no 0.Para obtener más información sobre éstos y otros miembros de CPrintInfo, vea la referencia de MFC.

Al principio del proceso de impresión, el marco de trabajo llama a la función miembro de OnPreparePrinting de vista, pasando un puntero a una estructura de CPrintInfo .El Asistente para aplicaciones proporciona una implementación de OnPreparePrinting que llame a DoPreparePrinting, otra función miembro de CView.DoPreparePrinting es la función que muestra el cuadro de diálogo imprimir y crea un contexto de dispositivo de impresora.

En este punto la aplicación no sabe cuántas páginas están en el documento.Utiliza los valores predeterminados 1 y 0xFFFF para los números de la primera y la última página del documento.Si sabe cuántas páginas tiene su documento, reemplace OnPreparePrinting y la llamada SetMaxPage para la estructura de CPrintInfo antes de que se envíe a DoPreparePrinting.Esto le permite especificar la longitud del documento.

DoPreparePrinting después muestra el cuadro de diálogo imprimir.Cuando vuelve, la estructura de CPrintInfo contiene los valores especificados por el usuario.Si el usuario imprima sólo un intervalo seleccionado de páginas, de él o la ella pueden especificar números de página inicial y final en el cuadro de diálogo imprimir.El marco recupera estos valores con las funciones de GetFromPage y de GetToPage de CPrintInfo.Si el usuario no especifica un intervalo de páginas, el marco de trabajo llama a GetMinPage y GetMaxPage y utiliza los valores devueltos para imprimir todo el documento.

Para cada página de un documento que se imprimirá, el marco dos funciones miembro en la clase de vista, OnPrepareDC y OnPrint, y pasar parámetros de cada función dos: un puntero a un objeto de CDC y un puntero a una estructura de CPrintInfo .Cada vez que el marco de trabajo llama a OnPrepareDC y OnPrint, pasa un valor diferente en el miembro de m_nCurPage de la estructura de CPrintInfo .De esta manera el marco indica a vista qué página debe ser impresa.

La función miembro de OnPrepareDC también se utiliza para la presentación en pantalla.Crea ajustes al contexto de dispositivo antes de que tenga lugar el dibujo.OnPrepareDC desempeña un rol similar en la impresión, pero hay un par de diferencias: primero, el objeto de CDC representa un contexto de dispositivo de impresora en lugar de un contexto de dispositivo de pantalla y, a continuación, un objeto de CPrintInfo se pasa como segundo parámetro.(Este parámetro es NULL cuando OnPrepareDC se llama para la presentación en pantalla). Reemplace OnPrepareDC para ajustar el contexto de dispositivo basado en se imprime qué página.Por ejemplo, puede mover el origen de la ventanilla y la zona de recorte para asegurarse de que la parte correspondiente del documento obtiene impreso.

La función miembro de OnPrint realiza la impresión real de la página.El artículo Cómo predeterminados impresión terminado muestra cómo el marco de trabajo llama a OnDraw con un contexto de dispositivo de impresora para realizar la impresión.Más concretamente, el marco de trabajo llama a OnPrint con una estructura de CPrintInfo y un contexto de dispositivo, y OnPrint pasa el contexto del dispositivo a OnDraw.Reemplace OnPrint para realizar cualquier representación que debe realizarse solo durante la impresión y no para la presentación en pantalla.Por ejemplo, imprimir encabezados o pies de página (vea el artículo encabezados y pies de página para obtener más información).A continuación llamada OnDraw de reemplazo de OnPrint para hacer el común de representación a la presentación en pantalla y la impresión.

El hecho de que OnDraw haga la representación para la presentación en pantalla y la impresión significa que la aplicación está en modo WYSIWYG: “Lo que se ve es lo que se obtiene”. Sin embargo, suponga que no está escribiendo una aplicación WYSIWYG.Por ejemplo, piense en un editor de texto que utiliza una fuente negrita para que los códigos de control el imprimir pero de muestra indican texto en negrita en la pantalla.En esta situación, se utiliza OnDraw estrictamente para la presentación en pantalla.Cuando se invalida OnPrint, sustituya la llamada a OnDraw con una llamada a una función independiente del gráfico.Que la función dibuja el documento la forma que aparece en el papel, utilizando los atributos que no muestra en pantalla.

Páginas de la impresora con.Páginas de un documento

Al hacer referencia a los números de página, a veces es necesario diferenciar entre el concepto de impresora de una página y el concepto de un documento de una página.Desde el punto de vista de la impresora, una página es una hoja de papel.Sin embargo, una hoja de papel no es necesariamente una página del documento.Por ejemplo, si va a imprimir un boletín, donde se plegado hojas, una hoja de papel puede contener ambas la primera y la última páginas de documento, en paralelo.De igual forma, si está imprimir una hoja de cálculo, el documento no consta de páginas en absoluto.En su lugar, una hoja de papel podría contener las filas 1 a 20, columnas 6 a 10.

Todos los números de página en la estructura de CPrintInfo hacen referencia a las páginas de la impresora.El marco de trabajo llama a OnPrepareDC y OnPrint una vez para cada hoja de papel que pasa a través de la impresora.Cuando se reemplaza la función de OnPreparePrinting para especificar la longitud del documento, debe usar las páginas de la impresora.Si hay una correspondencia (es decir, una página de la impresora es una página de un documento), entonces esto es fácil.Si, por otro lado, las páginas de un documento y las páginas de la impresora no corresponden directamente, debe traducir entre ellas.Por ejemplo, considere imprimir una hoja de cálculo.Al reemplazar OnPreparePrinting, debe calcular cuántas hojas de papel serán necesarias imprimir la hoja de cálculo completa y después utilizar ese valor al llamar a la función miembro de SetMaxPage de CPrintInfo.De igual forma, al reemplazar OnPrepareDC, debe convertir m_nCurPage al intervalo de las filas y columnas que aparecerán en la hoja determinada y después se ajustarán el origen de la ventanilla en consecuencia.

Paginación de IMPR-Tiempo

En algunas situaciones, la clase de vista no puede saber de antemano cuánto tiempo es el documento hasta que se haya impreso realmente.Por ejemplo, suponga que la aplicación no está en modo WYSIWYG, por lo que una longitud de documento en la pantalla no corresponde a su longitud al imprimirse.

Esto produce un problema cuando se reemplaza OnPreparePrinting para la clase de vista: no puede pasar un valor a la función de SetMaxPage de la estructura de CPrintInfo , porque no conoce la longitud de un documento.Si el usuario no especifica un número de página para detener en mediante el cuadro de diálogo imprimir, el marco no sabe cuándo detener el bucle de impresión.La única manera de determinar cuándo dejar el bucle de impresión es imprimir el documento y considerar cuando finaliza.La clase de la vista debe comprobar el final del documento mientras se imprimir, y después informar al marco cuando se alcanza el final.

El marco se basa en la función de OnPrepareDC de su clase de vista para indicar que cuándo detener.Después de cada llamada a OnPrepareDC, el marco compruebe un miembro de la estructura de CPrintInfo denominada m_bContinuePrinting.El valor predeterminado es TRUE. Si es así, el marco continúa el bucle de impresión.Si se establece en FALSE, el marco se detiene.Para realizar la paginación de IMPR-Tiempo, reemplazo OnPrepareDC para comprobar si el final del documento se ha alcanzado, y el conjunto m_bContinuePrinting a FALSE cuando tiene.

La implementación predeterminada de los conjuntos m_bContinuePrinting de OnPrepareDC a FALSE si la página actual es mayor que 1.Esto significa que si la longitud del documento no se ha especificado, el marco se supone que el documento es de longitud.Una consecuencia de esto es que debería tener en cuenta si se llama a la versión de la clase base de OnPrepareDC.No suponga que m_bContinuePrinting se TRUE después de llamar a la versión de la clase base.

w7wzay73.collapse_all(es-es,VS.110).gif¿Qué más desea saber?

Vea también

Referencia

Imprimir

CView (Clase)

CDC (Clase)