PrintPreview OK, pero no imprime correctamente
Publicado por Nelek (816 intervenciones) el 10/04/2007 12:28:19
Hola,
estoy usando este codigo para imprimir desde mi proyecto.
BOOL CFPSView::OnPreparePrinting(CPrintInfo* pInfo)
{
pInfo->m_pPD->m_pd.Flags |= PD_NOPAGENUMS;
pInfo->m_pPD->m_pd.Flags |= PD_NOSELECTION;
pInfo->m_pPD->m_pd.Flags |= PD_HIDEPRINTTOFILE;
pInfo->SetMaxPage (1);
return DoPreparePrinting(pInfo);
}
y
void CFPSView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
CFPSDoc* pDoc = GetDocument ();
ASSERT_VALID (pDoc);
pDC->SetMapMode (MM_LOMETRIC);
CBitmap bmNormIn, bmNormOut, bmNormReg;
CPoint cpFromPoint, cpToPoint;
CFont fontLabels; fontLabels.CreatePointFont (80, "MS Sans Serif", pDC);
CDC dcNormMem;
dcNormMem.CreateCompatibleDC (pDC);
CFont* fontOld = pDC->SelectObject (&fontLabels);
pDC->SetBkMode (TRANSPARENT);
if (bmNormIn.m_hObject != NULL)
bmNormIn.DeleteObject();
bmNormIn.LoadBitmap (IDB_NORMIN);
CBitmap* pbmEmpty = dcNormMem.SelectObject(&bmNormIn);
for (int nIn = 0; nIn < pDoc->m_cmlInputSet.GetCount (); nIn++)
{
pDC->StretchBlt(
2 * pDoc->m_cmlInputSet[nIn].m_cpInCoord.x,
-2 * pDoc->m_cmlInputSet[nIn].m_cpInCoord.y,
2 * SIGWIDTH,
-2 * SIGHEIGHT,
&dcNormMem,
0,
0,
SIGWIDTH,
SIGHEIGHT,
SRCCOPY
);
pDC->TextOut(
2 * pDoc->m_cmlInputSet[nIn].m_cpInCoord.x,
-2 * pDoc->m_cmlInputSet[nIn].m_cpInCoord.y + (-2 * SIGHEIGHT),
pDoc->m_cmlInputSet[nIn].m_szInName
);
}
//... mas cosas
}
La vista previa me la crea perfectamente (tamanyos, posiciones, letras, lineas de conexion... todo), pero sin embargo cuando lo mando imprimir a la impresora me sale TODO MENOS LOS BITMAP que solo me sale un puntito en el vertice de arriba a la izquierda (el punto donde dice sus coordenadas). Lo mejor de todo es que en una prueba que hice, comente el contenido del PreparePrinting y me funciono bien (solo dos veces) y luego volvio a lo de siempre (el puntito en lugar del bitmap entero).
Alguien me puede decir que pasa? Porque la verdad es que no lo entiendo. Lo que hago con "TextOut (...), LineTo (...)" y metodos de ese estilo funciona siempre, pero la carga de los bitmaps... como que no y me tiene bastante mosqueado.
estoy usando este codigo para imprimir desde mi proyecto.
BOOL CFPSView::OnPreparePrinting(CPrintInfo* pInfo)
{
pInfo->m_pPD->m_pd.Flags |= PD_NOPAGENUMS;
pInfo->m_pPD->m_pd.Flags |= PD_NOSELECTION;
pInfo->m_pPD->m_pd.Flags |= PD_HIDEPRINTTOFILE;
pInfo->SetMaxPage (1);
return DoPreparePrinting(pInfo);
}
y
void CFPSView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
CFPSDoc* pDoc = GetDocument ();
ASSERT_VALID (pDoc);
pDC->SetMapMode (MM_LOMETRIC);
CBitmap bmNormIn, bmNormOut, bmNormReg;
CPoint cpFromPoint, cpToPoint;
CFont fontLabels; fontLabels.CreatePointFont (80, "MS Sans Serif", pDC);
CDC dcNormMem;
dcNormMem.CreateCompatibleDC (pDC);
CFont* fontOld = pDC->SelectObject (&fontLabels);
pDC->SetBkMode (TRANSPARENT);
if (bmNormIn.m_hObject != NULL)
bmNormIn.DeleteObject();
bmNormIn.LoadBitmap (IDB_NORMIN);
CBitmap* pbmEmpty = dcNormMem.SelectObject(&bmNormIn);
for (int nIn = 0; nIn < pDoc->m_cmlInputSet.GetCount (); nIn++)
{
pDC->StretchBlt(
2 * pDoc->m_cmlInputSet[nIn].m_cpInCoord.x,
-2 * pDoc->m_cmlInputSet[nIn].m_cpInCoord.y,
2 * SIGWIDTH,
-2 * SIGHEIGHT,
&dcNormMem,
0,
0,
SIGWIDTH,
SIGHEIGHT,
SRCCOPY
);
pDC->TextOut(
2 * pDoc->m_cmlInputSet[nIn].m_cpInCoord.x,
-2 * pDoc->m_cmlInputSet[nIn].m_cpInCoord.y + (-2 * SIGHEIGHT),
pDoc->m_cmlInputSet[nIn].m_szInName
);
}
//... mas cosas
}
La vista previa me la crea perfectamente (tamanyos, posiciones, letras, lineas de conexion... todo), pero sin embargo cuando lo mando imprimir a la impresora me sale TODO MENOS LOS BITMAP que solo me sale un puntito en el vertice de arriba a la izquierda (el punto donde dice sus coordenadas). Lo mejor de todo es que en una prueba que hice, comente el contenido del PreparePrinting y me funciono bien (solo dos veces) y luego volvio a lo de siempre (el puntito en lugar del bitmap entero).
Alguien me puede decir que pasa? Porque la verdad es que no lo entiendo. Lo que hago con "TextOut (...), LineTo (...)" y metodos de ese estilo funciona siempre, pero la carga de los bitmaps... como que no y me tiene bastante mosqueado.
Valora esta pregunta


0