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);
    

Log in to reply