IMPRIMIR EN PUERTO LPT1

27/10/2004 - 21:41 por Claudia López | Informe spam
Deseo imprimir un reporte desde código de Visual C++ 6.0, no se como
hacerlo.
 

Leer las respuestas

#1 Fernando Marin
28/10/2004 - 00:47 | Informe spam
Saludos Claudia, hace unos dias conteste una pregunta similar, así que corto
y pego, un saludo :)

los dialogos standar de windows, esto hace que la aplicación no dependa de
la impresora
ni de la versión del sistema operativo

Aque te pongo un pequeño ejemplo:

// Primero debes incluir los siguientes archivos
#include "stdafx.h"
#include "windows.h"
#include "WINSPOOL.H"
#include "afxtempl.h"

// Se seleciona la impresora, se crea un contexto de impresión,
// inicias el documento, inicias la pagina, llamas a las funciones
// que imprimen el texto o graficos, cierras la pagina .. (así con todas las
páginas)
// y cierras el documento

HDC hdcPrn=NULL;
LPDEVMODE pDevMode;
CPrintDialog dlgImpresora(TRUE); // dialogo de impresión
if(dlg.Impresora.DoModal( )==IDOK)
{
hdcPrn=dlgImpresora.CreatePrinterDC( );
DOCINFO di = { sizeof(DOCINFO),_T("Titulo Documento"),NULL };
if(NULL!=hdcPrn)
{
if(StartDoc(hdcPrn,&di)>0)
{
StartPage(hdcPrn);
GDICalls(hdcPrn); // Función para la impresión de pagina
EndPage(hdcPrn);
EndDoc(hdcPrn);
}
DeleteDC(hdcPrn);
}
}

// Función para la impresión de pagina
void GDICalls(HDC hDC)
{
// Definimos el tamaño del papel, así como la resolución y modo grafico
int nTamX=GetDeviceCaps(hDC,HORZSIZE)*10;//2100;//
int nTamY=GetDeviceCaps(hDC,VERTSIZE)*10;//2000;//
int nResX=GetDeviceCaps(hDC,HORZRES);//0;//
int nResY=GetDeviceCaps(hDC,VERTRES);//0;//
SetMapMode(hDC,MM_ANISOTROPIC);//hDC,MM_LOMETRIC);//
SetWindowExtEx(hDC,nTamX,nTamY,NULL);
SetViewportExtEx(hDC,nResX,nResY,NULL);

// Selección de la fuente, te pongo como selecionar la fuente, ya que es
lo que
// me costo mas entender
HFONT m_fontOld;
LOGFONT lf; // Nueva fuente
memset(&lf,0,sizeof(LOGFONT));
lf.lfOrientation=0;
lf.lfEscapement=0;
lf.lfItalic=0;
lf.lfUnderline=0;
lf.lfStrikeOut=0;
lf.lfWidth=0;
lf.lfWeight=0;
lf.lfCharSet=0;
lf.lfOutPrecision=0;
lf.lfClipPrecision=0;
lf.lfQuality=0;//PROOF_QUALITY;
lf.lfPitchAndFamily=0;//FF_MODERN;
lf.lfHeightP;
strcpy(lf.lfFaceName,"Times New Roman"/*"Ariel"*//*"Courrier New"*/);
HFONT m_font;
m_font=CreateFontIndirect(&lf);
m_fontOld=(HFONT)SelectObject(hDC,m_font); // seleccionas la fuente y
guardas la fuente antigua

// llamas a las funciones de impresión
Rectangle(hDC, 350, 115, 1050, 200); // dibujas un rectangulo
TextOut(hDC, 390, 60,"Hola Mundo",10); // Para escribir Texto
DrawText(hDC,"Hola Mundo" ,-1,CRect(700, 65, 1000, 500),DT_CENTER ); //
Otra función para escribir texto
(HFONT)SelectObject(hDC,m_fontOld); // selecionas la fuente antigua
}


// unas notas que he encontrado
/*
The task for put out CString to a printer

1º Show common dialog box for printing and create a valid handle to the
newly created printer device context.
2º Calculate Height and Width in millimeters and pixels, of the paper, for
set up the rectangle, in logical coordinates, in which the text is to be
formatted
3º Create the body font and save the old font in a handle for restore later.
4º Create a DOCINFO structure contains the input and output filenames and
other information used by the StartDoc function
5º Starts a print job "StartDoc"
6º Prepares the printer driver to accept data "StartPage"
7º Draws formatted text in the specified rectangle, check the number of
characters processed by DrawTextEx, spand the rectangle and Draw the length
Measured of the text to print with dtparams.uiLengthDrawn of DRAWTEXTPARAMS
structure
8º Informs the device that the application has finished writing to a page
"EndPage"
9º While have text to print return to point 6º
10º Ends a print job "EndDoc"
11º Restore old font, delete body font and delete the printer device
context.

*/

Un saludo y espero que te sirva


www.arrendamientos.biz
Fernando Marín



"Claudia López" escribió en el mensaje
news:
Deseo imprimir un reporte desde código de Visual C++ 6.0, no se como
hacerlo.

Preguntas similares