Paginate and Print MSFlexGrid Content the Easy Way

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;
    m_pxPrintGrid->Paginate(&xDC, m_pxGrid);

    // Update the number of pages according to DC size
    pInfo->m_nNumPreviewPages = 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,
    // Call parent
    CFormView::OnPrint(pDC, pInfo);

Enjoy it! I hope it will be useful.


Download Class Code: – 4 Kb

More by Author

Must Read