Zeilendrucken, doch wie TextHoehe ermitteln???



  • Hallo!

    Weiss jemand wie ich die Hoehe einer Zeile beim Drucken ermitteln kann??
    Die ist bei jedem Drucker anders... Zur Zeit habe ich konstante Werte fuer eine Zeile: py+=55;
    Das geht bei einigen Druckern gut, bei einigen wieder nich... (Zeilen liegen etwas uebereinander...)

    Wie kann ich also die Hoehe einer Zeile ermitteln???

    void CMovieDBDlg::Print()
    {
        HDC hdcPrn;
    
        CPrintDialog PrintDlg(FALSE, PD_ALLPAGES | PD_RETURNDC, NULL);
        PrintDlg.DoModal();
        hdcPrn = PrintDlg.GetPrinterDC();
        if(hdcPrn != NULL)
        {
    
            // create a CDC and attach it to the default printer
            CDC pDC;
            pDC.Attach(hdcPrn);
    
            int cx = pDC.GetDeviceCaps(PHYSICALWIDTH);
            int cy = pDC.GetDeviceCaps(PHYSICALHEIGHT);
            bool newpage = 1;
            int count = 0;
            int py;
            CString sPageCount;
            int iPageCount = 0;
            const int iLeftMargin = 100;
            const int iRowCDName = 2000;
            CRect rcHeaderBox;
            CRect rcFooterBox;
            rcHeaderBox.SetRect(iLeftMargin, 0, cx, 55);
            rcFooterBox.SetRect(iLeftMargin, cy - 100, cx, cy - 45); 
            pDC.StartDoc("Media DB");
    
            for (int i = 0; i < m_szMovie.GetItemCount(); i++)
            {
    
                if (newpage)
                {
                    pDC.StartPage();
                    py = 0;
                    iPageCount++;
                    //Print Header
                    pDC.SetBkColor(RGB(228,228,228));
                    pDC.ExtTextOut(iLeftMargin, py, ETO_OPAQUE, rcHeaderBox, "", NULL);
                    pDC.TextOut(iLeftMargin, py, "Media Name");
                    pDC.TextOut(iRowCDName, py, "Nr");
                    py = 70;
                    newpage = false;
                }
                pDC.TextOut(iLeftMargin,py,m_szMovie.GetItemText(i,0));
                pDC.TextOut(iRowCDName, py, m_szMovie.GetItemText(i,1));
                py+=55;
                if (py > (cy - 100))
                {
                    // Print Footer
                    py = cy - 100;
                    pDC.SetBkColor(RGB(228,228,228));
                    pDC.ExtTextOut(iLeftMargin, py, ETO_OPAQUE, rcFooterBox, "", NULL);
                    pDC.TextOut(iLeftMargin, py, m_szUser + "'s Media Datenbank");
                    sPageCount.Format("%d", iPageCount);
                    pDC.TextOut(iRowCDName, py, "Page: " + sPageCount);
                    pDC.EndPage();
                    newpage = true;
                }
    
            }
            // Print Footer
            py = cy - 100;
            pDC.SetBkColor(RGB(228,228,228));
            pDC.ExtTextOut(iLeftMargin, py, ETO_OPAQUE, rcFooterBox, "", NULL);
            pDC.TextOut(iLeftMargin, py, m_szUser + "'s Media Datenbank");
            sPageCount.Format("%d", iPageCount);
            pDC.TextOut(iRowCDName, py, "Page: " + sPageCount);
    
            pDC.EndPage();
            pDC.EndDoc();
            pDC.DeleteDC();
    
            }
    

    *Ratlos sei...

    Gruesse,
    KnOxX



  • Das Habe ich mir Errechnet wobei ich von den Maßen eines Din A4 Blattes ausgegangen bin.

    Anzahl X Pixel durch 210mm = X Pixel pro Millimeter
    Anzahl Y Pixel durch 300mm = Y Pixel pro Millimeter

    Die Höhe der schrift kanst du ja auch bestimmen!

    Siehe CFont und SelectObject()



  • Danke fuer die Antwort!!

    Ich wuerde es nur gerne etwas dynamischer haben 😉

    Hier habe ich es gefunden:

    [url] http://www.codeproject.com/printing/print_support.asp [/url]

    Gruesse,
    KnOxX



  • wow das hier ist genau das was ich gebraucht habe.

    Nur weis ich nicht wie ich das neue CRect object einbauen soll bzw. benutzen mit dem CDC objekt...

    :-\

    Könntet ihr mir da helfen pls? 🙂

    MfG
    T1c4L


Anmelden zum Antworten