Exemplo n.º 1
0
        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;
        }