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

请参见

参考

CView选件类

层次结构图

CDC::Escape

CPrintInfo结构

CView::OnBeginPrinting

CView::OnDraw

CView::OnPreparePrinting

CView::OnPrint