Problemas con vista previa de impresion.

06/01/2005 - 17:10 por Ivan Cachicatari | Informe spam
Hola amigos,

Espero que alguien pueda solucionar mi problema, estoy desarrollando una
aplicacion MDI y utilizo la clase CScrollView para visualizar un mapa de
bits, el problema es que no importa cuan grade sea el grafico que estoy
visualizando, cuando abro la vista preliminar solo aparece una imagen
pequeña de la original en la parte superior. Lo mismo sucede en otras
situaciones cuando dibujo lo que sea con el objeto pDC.

Gracias de antemano.

Ivan Cachicatari
www.latindevelopers.com

Preguntas similare

Leer las respuestas

#1 Rafael
06/01/2005 - 20:42 | Informe spam
Ivan, creo que tu problema está en el rectángulo que usas para definir la
imagen.
Respuesta Responder a este mensaje
#2 Sergio
07/01/2005 - 10:28 | Informe spam
Ivan Cachicatari wrote:
Hola amigos,

Espero que alguien pueda solucionar mi problema, estoy desarrollando una
aplicacion MDI y utilizo la clase CScrollView para visualizar un mapa de
bits, el problema es que no importa cuan grade sea el grafico que estoy
visualizando, cuando abro la vista preliminar solo aparece una imagen
pequeña de la original en la parte superior. Lo mismo sucede en otras
situaciones cuando dibujo lo que sea con el objeto pDC.

Gracias de antemano.

Ivan Cachicatari
www.latindevelopers.com






El caso es que la resolución de la impresora va a ser casi con toda
seguridad mucho mayor que la de tu pantalla.

Para que te funcione bien tienes que obtener la proporción entre el dc
de tu programa y el que te devuelve la impresora, ya que dependiendo de
la calidad de la impresión, no va a ser la misma.

Una solución que uso yo (que no quiere decir que sea la mejor):

CPrintDialog dlg(FALSE);
if (dlg.DoModal() != IDOK)
return;
HDC imp = dlg.GetPrinterDC();
CDC impresora;
impresora.Attach(imp);
DOCINFO docinfo;
memset(&docinfo,0,sizeof(docinfo));
docinfo.cbSize = sizeof(docinfo);
docinfo.lpszDocName = _T("Match Vision print queue");
impresora.StartDoc(&docinfo);
impresora.StartPage();
int prx = impresora.GetDeviceCaps(HORZRES);
int pry = impresora.GetDeviceCaps(VERTRES);
CRect rect;
GetClientRect(&rect);
float rtx = (float) prx / rect.Width();
float rty = (float) prx / rect.Height();

Con esto obtengo la proporción entre mi dialogo, y la hoja donde voy a
imprimir.

Y cuando tengas que dibujar algo en la hoja:

impresora.Rectangle(10,(5 * rty),prx - 10,(88 * rty));
impresora.FillRect(&CRect((8 * rtx),0,(103 * rtx),(10 *
rty)),&CBrush(RGB(255,255,255)));

Espero que te sirva el ejemplo.
Respuesta Responder a este mensaje
#3 Ivan Cachicatari
10/01/2005 - 16:10 | Informe spam
Gracias Sergio,

Voy a intentar con el codigo que enviaste, y luego postearé algo con los
resultados.

Ivan Cachicatari
http://www.latindevelopers.com
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida