private void pd_PrintPage(object sender, PrintPageEventArgs e)
{
// If the print rootsite hasn't been initialized yet, do so now.
if (m_rootb == null)
{
Init(e);
if (m_rootb == null || !m_morePagesToPrint)
{
e.HasMorePages = false;
return;
}
}
// Initialize the IVwGraphics with the hDC from the .Net graphics object.
IVwGraphics vwGraphics = VwGraphicsWin32Class.Create();
IntPtr hdc = e.Graphics.GetHdc();
((IVwGraphicsWin32)vwGraphics).Initialize(hdc);
m_vwPrintContext.SetGraphics(vwGraphics);
// Print the next page
m_rootb.PrintSinglePage(m_vwPrintContext, m_nextPageToPrint);
// Release these things here or bad things will happen.
vwGraphics.ReleaseDC();
if (hdc != IntPtr.Zero)
e.Graphics.ReleaseHdc(hdc);
// If more lines exist, print another page.
Advance();
e.HasMorePages = m_morePagesToPrint;
}