Drucken Schrift ist nicht gleich gross...
-
Hi
Ich habe die Funktion aus dem Forum um einen Text zu drucken...
Diese funktioniert einwandfrei. Ich habe aber nun bemerkt, dass je nachdem was der Drucker für eine Auflösung hat, die Schrift nicht gleich gross ist!Kann mir jemand sagen, wie ich dies korrigieren kann?
CPrintDialog dlgPrint(FALSE,PD_ALLPAGES,this); UpdateData(TRUE); // CString m_sText; // m_AuthAnzeige.GetLine(0,m_sText.GetBuffer(NULL)); int m_iLeft = 15; // in mm int m_iTop = 15; // in mm int m_iRight = 15; // in mm int m_iButton =15; // in mm CString textzudrucken; textzudrucken="Dies ist eine Testseite."; if (dlgPrint.DoModal()==IDOK) { CDC dcPrint; dcPrint.Attach(dlgPrint.GetPrinterDC()); DOCINFO myPrintJob; myPrintJob.cbSize = sizeof(myPrintJob); myPrintJob.lpszDocName = "PrintingTest"; myPrintJob.lpszOutput = NULL; myPrintJob.lpszDatatype = NULL; myPrintJob.fwType = NULL; if (dcPrint.StartDoc(&myPrintJob)>=0) { // Als Hilfe wie man bestimmte Parameter abfragt int te = dcPrint.GetDeviceCaps(ASPECTY); int test = dcPrint.GetDeviceCaps(ASPECTX); int m_iHorizont = dcPrint.GetDeviceCaps(HORZRES); int m_iVerdikal = dcPrint.GetDeviceCaps(VERTRES); dcPrint.StartPage(); RECT rctA; rctA.left = (m_iHorizont/210) * m_iLeft; // 210 Breite DIN A4 rctA.top = (m_iVerdikal/297) * m_iTop; // 297 Höhe DIN A4 rctA.right = m_iHorizont - ((m_iHorizont/210) * m_iRight); rctA.bottom = m_iVerdikal - ((m_iVerdikal/297) * m_iButton); CFont newFont; VERIFY(newFont.CreateFont( 300, // nHeight 0, // nWidth 0, // nEscapement 0, // nOrientation FW_NORMAL, // nWeight FALSE, // bItalic FALSE, // bUnderline 0, // cStrikeOut ANSI_CHARSET, // nCharSet OUT_DEFAULT_PRECIS, // nOutPrecision CLIP_DEFAULT_PRECIS, // nClipPrecision DEFAULT_QUALITY, // nQuality DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily "Arial")); // lpszFacename CFont* oldFont = dcPrint.SelectObject(&newFont); // dcPrint.TextOut(0,0,drucken); dcPrint.DrawText(textzudrucken, &rctA, DT_LEFT); dcPrint.EndPage(); dcPrint.EndDoc(); } dcPrint.DeleteDC(); }
-
Indem Du den statischen Wert 300 durch einen dynamisch errechneten Wert ersetzt, der die jeweilige Druckerauflösung mit einbezieht:
VERIFY(newFont.CreateFont( -MulDiv(10, GetDeviceCaps(dcPrint,LOGPIXELSY), 72), // nHeight 0, // nWidth 0, // nEscapement 0, // nOrientation FW_NORMAL, // nWeight FALSE, // bItalic FALSE, // bUnderline 0, // cStrikeOut ANSI_CHARSET, // nCharSet OUT_DEFAULT_PRECIS, // nOutPrecision CLIP_DEFAULT_PRECIS, // nClipPrecision DEFAULT_QUALITY, // nQuality DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily "Arial")); // lpszFacenameIn diesem Fall ist als Schriftgröße 10 gewählt.
Gruß T.

-
Hi danke!
Noch eine andere Frage...
Wie kann ich Linien und Rechtecke drucken?
-
Sieh Dir mal CDC::MoveTo und CDC::LineTo für Linien an.
Mit CDC::Rectangle malst Du Rechtecke.Gruß T.
