Cómo imprimir una vista previa de un solo documento en VC
Las funciones virtuales que deben agregarse son:
public:
virtual void OnPrepareDC(CDC* pDC, CPrintInfo* pInfo = NULL ); p>
protegido:
virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo); vacío virtual OnEndPrinting (CDC* pDC, CPrintInfo* pInfo);
vacío virtual OnPrint(CDC* pDC, CPrintInfo* pInfo
vacío virtual OnEndPrintPreview(CDC* pDC, CPrintInfo*); pInfo, punto PUNTO, CPreviewView* pView);
Entre ellos:
OnPrepareDC es un tipo público, y esta función se llamará al enviar a la pantalla, imprimir y obtener la vista previa de impresión.
Al salir a la pantalla, CView::OnPaint() llamará a esta función, y su prototipo de función es:
void CView::OnPaint()
{
// Rutina de pintura estándar
CPaintDC dc(this) )
OnPrepareDC(amp; dc);
OnDraw( amp; dc);
}
Y la vista previa de impresión se llama mediante la siguiente función: CPreviewView::OnDraw(CDC*pDC) (su prototipo es más largo, por lo que lo ignoraré; él) . Aparentemente, se llama para preparar el contexto del dispositivo.
Por supuesto, si agrega el evento WM_PAINT a su clase derivada de CView, no se llamará a OnPrepareDC cuando se muestre en la pantalla.
En la vista previa de impresión, las funciones anteriores se llamarán en el siguiente orden:
OnPreparePrinting--gt; OnBeginPrinting--gt; OnPrepareDC--gt; - -gt.OnEndPrinting.
Si la ventana cambia durante la vista previa de impresión, se llamará OnPrepareDC --gt;OnPrint repetidamente.
De acuerdo con el proceso anterior, podemos preparar la información de impresión CPrintInfo * pInfo en la función OnPreparePrinting
Agregar información de impresión en OnPrint, por supuesto, eliminar CView::OnPrint ( pDC, pInfo);; llamado.
CView::OnPrint(pDC, pInfo); Se llamará a la función OnDraw en la clase CView y su prototipo de función es:
void CView::OnPrint(CDC* pDC, CPrintInfo*)
{
ASSERT_VALID(pDC);
// Reescribe y configura las variables de impresión según los números de página
OnDraw(pDC);
// Llamar a Draw
}
Si desea imprimir varias páginas, puede imprimir de acuerdo con la información CPrintInfo* pInfo en la función OnPrint, por ejemplo:
if(pInfo -gt;m_nCurPage==1){
Salida
}
else if(pInfo-gt;m_nCurPage= =2) {
Salida
}
Porque la resolución de la impresora suele ser mucho mayor que la resolución de la pantalla. Si la misma declaración de salida ocupa 1 centímetro en la pantalla, es posible que la distancia en la impresora sea muy corta. Por lo tanto, al generar información de impresión, es necesario establecer una determinada relación de salida. Puede obtener las resoluciones de la impresora y de la pantalla indirectamente utilizando el método GetDeviceCaps de CDC. El método es el siguiente:
int GetDeviceCaps(int nIndex)const;
Descripción del parámetro:
nIndex: identifica el tipo de información que devuelve el método. LOGPIXELSX es el objeto CDC actual y representa el número de píxeles por pulgada en la dirección horizontal del dispositivo. LOGPIXELSY LOGPIXELSY es el objeto CDC actual y representa el número de píxeles por pulgada verticalmente en el dispositivo.
Cuando el objeto CDC de ventana llama al método GetDeviceCaps (LOGPIXELSX), se devuelve el número de píxeles por pulgada en la dirección horizontal de la pantalla. Cuando el objeto CDC de una impresora llama al método GetDeviceCaps (LOGPIXELSX), lo que se devuelve es el número de píxeles por pulgada en la dirección horizontal de la impresora. Al dividir los datos devueltos por estos dos métodos, se obtiene la relación de resolución de impresora a pantalla.
Por lo general, puedes obtener el número de píxeles por pulgada de la pantalla en el método OnDraw de la clase CView, el código es el siguiente:
screenx=pDC-gt; (LOGPIXELSX);
screeny=pDC-gt;GetDeviceCaps (LOGPIXELSY);
Obtenga el número de píxeles por pulgada de la impresora en el método OnBeginPrinting de la clase CView, el código. es el siguiente:
printx=pDC -gt; GetDeviceCaps(LOGPIXELSX);
printy=pDC -gt; GetDeviceCaps(LOGPIXELSY);
xrate=( double)printx/screenx;
yrate =(double)printy/screeny;
La declaración de salida en OnDraw es la misma que la declaración de salida en OnPrint, pero la declaración de salida cambia ligeramente Por ejemplo, la declaración de salida en OnDraw es:
pDC-gt; TextOut(100, 100, "wjh");
pDC-gt; TextOut((int)100*xrate, ( int)100*yrate, "wjh");
Por supuesto, la fuente también debe ampliarse.