TietgenSkolen - Datamatikeruddannelsen


Microsoft Windows Applikationsudvikling

med

Visual C++ 4.0 og MFC


Printning

Den genererede kode supporterer umiddelbart udprintning af dokumenter på en side. Hvis der skal printes dokumenter på flere sider skal der laves få tilføjelser til koden.

Først opsættes information om antal sider, der skal printes, i view klassens (fx TsView) member funktion OnBeginPrinting. Desuden opsættes hvilken mapning mellem logiske og fysiske enheder, der anvendes, i view klassens member funktion OnPrepareDC. Begge funktioner opsættes ved hjælp af ClassWizard.






        void CTsView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)


        {


                // Beregn antal sider i udprintning


                ComputeReportMetrics(pDC);


                int nTotalLines = GetDocument()->GetDocLines();


                int nTotalPages = nTotalLines / m_nLinesPerPage;


                if (nTotalLines % m_nLinesPerPage)


                        ++nTotalPages;


                pInfo->SetMaxPage(nTotalPages);


                // Start med side 1


                pInfo->m_nCurPage = 1;


        }





        void CTsView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo) 


        {


                CScrollView::OnPrepareDC(pDC, pInfo);


        


                if (pInfo)


                {


                        pDC->SetMapMode(MM_LOMETRIC);


                }


        }











Dernæst tilføjes ved hjælp af ClassWizard en OnPrint funktion til view klassen (fx CTsView). Der vælges "Class name: CTsView", "Object IDs: CTsVIew", "Messages: OnPrint" og <Add Function>. Dernæst vælges <Edit Code> og følgende tilføjes:






        void CTsView::OnPrint(CDC* pDC, CPrintInfo* pInfo) 


        {


                CTsDoc* pDoc = GetDocument();


                ASSERT_VALID(pDoc);





                if (pDoc->nDocType == 1)


                {


                        ComputeReportMetrics(pDC);





                        // Venstre margen 15 mm


                        pInfo->m_rectDraw.left += 150;


                        // Top margen 25 mm


                        pInfo->m_rectDraw.top += 250;





                        // Beregn første linie på hver side


                        int nFirstLine = (pInfo->m_nCurPage - 1) * m_nLinesPerPage;


                        int nLastLine  = nFirstLine + m_nLinesPerPage;





                        int nLine = 0;


                        for (long i = nFirstLine; i < nLastLine; i++)


                        {


                                if (i < pDoc->GetDocLines())         // Print kun doc data


                                {


                                        pDC->TextOut(pInfo->m_rectDraw.left,


                                                (-(pInfo->m_rectDraw.top +


                                                        (m_nLineHeight * nLine))),


                                                pDoc->csaPostNr[i]);


                                        ++nLine;


                                }


                        }


                }


        }















Disse sider er udarbejdet af:

Sidst opdateret 97-04-19 af Ole Christiansen