Paginate and Print MSFlexGrid Content the Easy Way
Posted
by Jordi Duatis
on February 7th, 2003
This article was contributed by Jordi Duatis.
Environment: VC6
MSFlexGrid is a useful control to present data in a Grid, but what happens when this content has to be printed? Here I present a class, PrintGrid, that paginates and prints the grid content. It uses a second Grid control and must be additionally inserted in your CFormView dialog resource or in your dialog.
- Add a second MSFlexGrid control to your form or dialog.
- Change the member in your view or dialog class from CMSFlexGrid to CPrintGrid* m_pxPrintGrid.
- Change the DDX command: DDX_Control(pDX, IDC_MSFLEXGRID2, *m_pxPrintGrid).
- Instantiate the control in your constructor: m_pxPrintGrid = new CPrintGrid().
- Override the operation OnPreparePrinting and OnPrint as follows:
BOOL MyFormView::OnPreparePrinting(CPrintInfo* pInfo) { // Calculate pages for all grid data CPrintDialog xPrintDlg(FALSE); CDC xDC; xPrintDlg.GetDefaults(); xDC.Attach(xPrintDlg.GetPrinterDC()); m_pxPrintGrid->Paginate(&xDC, m_pxGrid); xDC.Detach(); // Update the number of pages according to DC size pInfo->m_nNumPreviewPages = m_pxPrintGrid->GetNumPages(); pInfo->SetMinPage(1); pInfo->SetMaxPage(m_pxPrintGrid->GetNumPages()); // Display printer setup dialog and initialize CPrintInfo if (!DoPreparePrinting(pInfo)) { return FALSE; } // call parent return CFormView::OnPreparePrinting(pInfo); } void MyFormView::OnPrint(CDC* pDC, CPrintInfo* pInfo) { CString sTitle; sTitle = "My App title"; m_pxPrintGrid->PrintPage(pDC, pInfo->m_nCurPage, m_pxGrid, sTitle); // Call parent CFormView::OnPrint(pDC, pInfo); }
Enjoy it! I hope it will be useful.
Downloads
Download Class Code: PrintGrid.zip - 4 Kb