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