Druckt zu klein und/oder unterschiedlich
-
Ich drucke außerhalb der View Klasse in einer Dialogfeldklasse.
Ich weise dem Gerätekontext (CDC) mit CDC.SelectObject(&Font) einen erstellten Font zu. Das Problem an der Sache ist, dass von Rechner zu Rechner der erstellte FOnt in seiner Größe unterschiedlich ist. Auf den einen Rechner passen gerade mal 3 Buchstaben nebeneinander, bei einem anderen kann man es kaum noch lesen.Wie schaffe ich es das jeder Rechner gleichgroß druckt?? So weit ich weiß ist die Größenangabe beim createn eines Fonts nur relativ und nich absolut.
Ich freue mich für jede Anregung und schonmal Dank im Vorraus.lactose
-
Zeig doch mal ein Stück Quelltext.
Ich tippe auf den MapMode.Außerdem liegt das wohl eher am Drucker, oder?
-
Das denke ich auch. Die Drucker haben alle eine unterschiedliche Auflösung, die in die Berechnung der Font-Größe einbezogen werden muß.
Guckst Du hier:http://www.c-plusplus.net/forum/viewtopic.php?t=73416
Gruß T.
-
Hier erstelle ich den Font:
if(FontDlg.DoModal() == IDOK) { FontDlg.GetCurrentFont(&LogFont); LogFont.lfHeight = 10; schrift.CreatePointFontIndirect(&LogFont, &cDC ); } else schrift.CreateFont(0,0,0,0,FW_NORMAL,0,0,0,ANSI_CHARSET, OUT_DEVICE_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FIXED_PITCH|FF_MODERN,_T("Courier New"));
Und hier wird er zugewiesen:
cDC.SelectObject(&schrift); cDC.DrawText(out2,re,DT_CALCRECT |DT_LEFT | DT_MODIFYSTRING | DT_NOCLIP); cDC.TextOut(/*cDC.m_hDC,*/ 0, 0, out2,out2.GetLength());
ich werde mal das was in den anderen Beitrag steht ausprobieren, obwohl immer auf den gleichen Drucker zugegriffen wurde, nur von unterschiedlichen Rechnern.
Dank euch für eure Hilfe...lactose
-
also der Link zum Beitrag hat geholfen, wie immer war es nur eine Zeile:
[cpp]if(FontDlg.DoModal() == IDOK)
{
FontDlg.GetCurrentFont(&LogFont);
LogFont.lfHeight = -MulDiv(10, GetDeviceCaps(cDC.m_hDC,LOGPIXELSY), 72);
schrift.CreatePointFontIndirect(&LogFont, &cDC );
[/cpp]
Also ein schönes WE und danke.
-
ich habe die Anpassung an verschiedene Drucker noch mal folgend geändert:
CPrintDialog pdlg(FALSE,PD_ALLPAGES,this); DEVMODE *pDevMode; . . . pDevMode = pdlg.GetDevMode(); . . . iHohe = pDevMode->dmPaperLength / pDevMode->dmPrintQuality * 8; iZeilenHohe = pDevMode->dmPaperLength / 80; . . . LogFont.lfHeight = iHohe; schrift.CreatePointFontIndirect(&LogFont, &cDC ); . . . point.y += iZeilenHohe+2; cDC.SetViewportOrg(point);