Knowledge Base Nr: 00016 print_multi_doc_mfc.cpp - http://www.swe-kaiser.de

MFC: Beispiel für mehrere Seiten in einem View anzuzeigen bzw. zu drucken.

  
//- Der View muß von CView oder CScrollView abgeleitet sein.
//- Folgende Funktionen anpassen bzw. erzeugen:

#define MAX_PRINT_PAGE 5

#define MAX_X 2100 //DIN A4
#define MAX_Y 2970

void CDruckLulli3View::OnDraw(CDC* pDC)
{
CDruckLulli3Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

DoDrawPage(pDC, m_nCurrPage);
}

void CDruckLulli3View::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();

//Gesamte Größe dieser Ansicht setzen (nur CScrollView)
SetScrollSizes(MM_LOMETRIC, CSize(MAX_X, MAX_Y));
ResizeParentToFit();

m_nCurrPage = 1;
}

BOOL CDruckLulli3View::OnPreparePrinting(CPrintInfo* pInfo)
{
pInfo->SetMaxPage(MAX_PRINT_PAGE);

return DoPreparePrinting(pInfo);
}

void CDruckLulli3View::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
DoDrawPage(pDC, pInfo->m_nCurPage);
}

void CDruckLulli3View::DoDrawPage(CDC *pDC, int nPageNo)
{
// 1/10 mm, y negativ
pDC->SetMapMode(MM_LOMETRIC);

//header/footer support
if (pDC->IsPrinting())
pDC->TextOut(100,-10, "Headertext (wird nur gedruckt - erscheint nicht im View.)");
else
pDC->Rectangle(1, -1, MAX_X, -MAX_Y); //show page delimiters

//text
CString strPrintInfo;

strPrintInfo.Format("Page %d", nPageNo);
pDC->TextOut(0,0, "0,0");
pDC->TextOut(100,-100, strPrintInfo);
pDC->TextOut(0,-2500, "0,-2500");

//geom. figuren
CPen pen(PS_SOLID, 5, RGB(0,255,0));
pDC->SelectObject(&pen);

pDC->Rectangle(150, -150, 180 + nPageNo*200, -180 - nPageNo*40);

//bitmap
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1);

CDC cdc;
cdc.CreateCompatibleDC(pDC);
cdc.SelectObject(&bitmap);

for (int n = 0; n < nPageNo; n++)
pDC->StretchBlt(400 + n*100, -400 - n*100, 100, -100, &cdc, 0, 0,50, 50, SRCCOPY);
}

void CDruckLulli3View::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
switch (nChar)
{
case VK_PRIOR:
m_nCurrPage--;
if (m_nCurrPage < 1)
m_nCurrPage = 1;
RedrawWindow();
break;
case VK_NEXT:
m_nCurrPage++;
if (m_nCurrPage > MAX_PRINT_PAGE)
m_nCurrPage = MAX_PRINT_PAGE;
RedrawWindow();
break;
}

CScrollView::OnKeyDown(nChar, nRepCnt, nFlags);
}