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"));                 // lpszFacename
    

    In 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. 🙂


Anmelden zum Antworten