CView::OnPrepareDC
调用由结构,在 OnDraw 成员函数用于屏幕显示之前对打印或打印预览期间之前,因此,在 OnPrint 成员函数为每个页调用。
virtual void OnPrepareDC(
CDC* pDC,
CPrintInfo* pInfo = NULL
);
参数
pDC
指向用于呈现文档的图像将使用的设备上下文。pInfo
指向 CPrintInfo 描述当前打印作业的结构,如果 OnPrepareDC 对打印或打印预览调用; m_nCurPage 成员指定要打印的页。 如果 OnPrepareDC 为屏幕显示,调用此参数是 NULL。
备注
如果该函数为屏幕显示,调用此函数的默认实现不执行任何操作。 但是,此功能在派生类中被重写,例如 CScrollView,调整设备上下文的属性;因此,应在重写中开始始终调用基类实现。
如果函数对打印调用,默认实现检查在 pInfo 参数存储的页信息。 如果文档的长度未指定,OnPrepareDC 长假定文档是一页并停止打印循环,在一页上打印后。 函数通过设置结构的 m_bContinuePrinting 成员停止打印循环将 FALSE。
重写的 OnPrepareDC 任何原因如下:
调整设备上下文的属性作为需要为指定的页。 例如,因此,如果需要设置映射架构或设备上下文的其他特性,因此执行此功能。
执行打印时分页。 通常您指定文档的长度,打印时启动时,使用 OnPreparePrinting 成员函数。 但是,因此,如果您事先不知道文档处于(例如,那么,当打印不确定的记录数从数据库中)时,重写测试的 OnPrepareDC 对于文档末尾,以便在打印时。 当具有要打印时的不结合文档,设置 CPrintInfo 结构的 m_bContinuePrinting 成员访问 FALSE。
一页的页发送转义代码添加到基于基类型的打印机。 从 OnPrepareDC若要发送转义代码中,调用 pDC 参数的 Escape 成员函数。
在重写中开始时调用 OnPrepareDC 的基类版本。
示例
void CMyView::OnPrepareDC (CDC* pDC, CPrintInfo* pInfo)
{
CView::OnPrepareDC(pDC, pInfo);
// If we are printing, set the mapmode and the window
// extent properly, then set viewport extent. Use the
// SetViewportOrg member function in the CDC class to
// move the viewport origin to the center of the view.
if(pDC->IsPrinting()) // Is the DC a printer DC.
{
CRect rect;
GetClientRect (&rect);
pDC->SetMapMode(MM_ISOTROPIC);
CSize ptOldWinExt = pDC->SetWindowExt(1000, 1000);
ASSERT(ptOldWinExt.cx != 0 && ptOldWinExt.cy != 0);
CSize ptOldViewportExt = pDC->SetViewportExt(rect.Width(), -rect.Height());
ASSERT(ptOldViewportExt.cx != 0 && ptOldViewportExt.cy != 0);
CPoint ptOldOrigin = pDC->SetViewportOrg(rect.Width()/2, rect.Height()/2);
}
}
要求
Header: afxwin.h