C/Visual C - Problemas al imprimir (medio-avanzado).

 
Vista:

Problemas al imprimir (medio-avanzado).

Publicado por Nelek (816 intervenciones) el 25/04/2007 09:52:15
Hola,

La situacion es la siguiente:

A la hora de presentar las cosas en la pantalla con el OnDraw (...), uso pDC->SetMapMode (MM_TEXT) con funciones pDC->BitBlt (...) y pDC->TextOut (...) y todo funciona correcto. Ahora quiero imprimir las diferentes vistas de mi proyecto en papel y para ello he usado pDC->SetMapMode (MM_LOMETRIC) y pDC->StrechtBlt (...) y pDC->TextOut (...).

Todo estuvo funcionando perfectamente. Pude imprimir la vista principal del proyecto, mandando los mismos bitmaps de la pantalla hacia la impresora usando CBitmap::CreateCompatibleBitmap (...) y el StrechtBlt (...) (si, cambie todos los signos del eje Y para adecuarlo al nuevo sistema de mapeo). Luego avance a las vistas "secundarias" y tambien las imprimí perfectamente (todo en formato de hoja vertical DMORIENT_PORTRAIT). El problema vino cuando quise imprimir la ultima de las vistas secundarias.

Con ella tengo que usar POR NARICES el formato apaisado (DMORIENT_LANDSCAPE), asi que despues de llamar al CPrintDialog hice:

DEVMODE* devMode = pInfo->m_pPD->GetDevMode ();
devMode->dmOrientation = DMORIENT_PORTRAIT;

Y funcionó. Pero...

Ahora ya no se imprimen los bitmaps que antes SI se imprimian, en su lugar se imprime un puntito en lo que seria el vertice top-left del bitmap.

He estado haciendo pruebas de todos los tipos, he leido todo lo que he encontrado acerca de la impresion y no he encontrado ninguna solucion.

Creo que tiene que ver con lo que hice para cambiar la orientacion de la pagina, ya que según la ayuda del VC++ "You must unlock the memory taken by this structure with the Windows GlobalUnlock function, which is described in the Platform SDK." Y eso no lo he hecho porque no me he aclarado con lo que explican.

BOOL GlobalUnlock(
HGLOBAL hMem // handle to the global memory object
);

Pero como se consigue el Handle del DEVMODE que tengo que desbloquear despues de modificar su orientacion?

En caso de haber otras posibilidades para que los CBitmap ya no se impriman correctamente, os ruego que me las comenteis a ver si logro solucionar esto.

Yo tengo la mania de guardarme una copia del programa cada vez que completo algun metodo para poder volver atras en caso necesario. Lo peor de todo es que he probado a imprimir con las 4 versiones anteriores donde SI QUE IMPRIMIA bien y ahora tampoco me imprimen los bitmaps correctamente. Alguien me puede explicar el por que?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder