Paginate and Print MSFlexGrid Content the Easy Way

CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More.


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.

The instructions are as follows:

  • 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

More by Author

Get the Free Newsletter!

Subscribe to Developer Insider for top news, trends & analysis

Must Read