Пример #1
0
void CEditView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
	ASSERT_VALID(this);
	ASSERT_VALID(pDC);
	ASSERT(pInfo != NULL);
	ASSERT(pInfo->m_bContinuePrinting);

	CFont* pOldFont = NULL;
	if (m_hPrinterFont != NULL)
		pOldFont = pDC->SelectObject(CFont::FromHandle(m_hPrinterFont));
	pDC->SetBkMode(TRANSPARENT);

	UINT nPage = pInfo->m_nCurPage;
	ASSERT(nPage <= (UINT)m_aPageStart.GetSize());
	UINT nIndex = m_aPageStart[nPage-1];

	// print as much as possible in the current page.
	nIndex = PrintInsideRect(pDC, pInfo->m_rectDraw, nIndex, GetBufferLength());

	if (pOldFont != NULL)
		pDC->SelectObject(pOldFont);

	// update pagination information for page just printed
	if (nPage == (UINT)m_aPageStart.GetSize())
	{
		if (nIndex < GetBufferLength())
			m_aPageStart.Add(nIndex);
	}
	else
	{
		ASSERT(nPage+1 <= (UINT)m_aPageStart.GetSize());
		ASSERT(nIndex == m_aPageStart[nPage+1-1]);
	}
}
Пример #2
0
void CEditView::OnPrint( CDC *pDC, CPrintInfo *pInfo )
/****************************************************/
{
    ASSERT( pDC != NULL );
    ASSERT( pInfo != NULL );
    HFONT hOldFont = NULL;
    if( m_hPrinterFont != NULL ) {
        hOldFont = (HFONT)::SelectObject( pDC->m_hDC, m_hPrinterFont );
    }
    int n = m_aPageStart.GetAt( pInfo->m_nCurPage - 1 );
    n = PrintInsideRect( pDC, pInfo->m_rectDraw, n, GetBufferLength() );
    if( pInfo->m_nCurPage == m_aPageStart.GetCount() && n < GetBufferLength() ) {
        m_aPageStart.Add( n );
    }
    if( hOldFont != NULL ) {
        ::SelectObject( pDC->m_hDC, hOldFont );
    }
}