1、准备知识
函数名 | 覆盖函数可能完成的任务 |
---|---|
CView::OnPreparePrinting() | 调用CprintInfo成员函数(如CprintInfo::SetMaxPage设置文档长度)或设置CprintInfo数据成员以影响Print对话框或打印预览操作,然后调用DoPreparePrinting生成用于打印或打印预览的设备描述表(注意必须覆盖OnPreparePrinting并调用DoPreparePrinting) |
CView::OnBeginPrinting() | 分配专门用于打印的字体,画笔、画刷和其它对象,根据设备描述表计算并设置文档长,在设备描述表上存放所需的消息(这是第一个访问设备描述表的的虚拟函数) |
CView::OnPrepareDC() | 设置打印当前页面的文本或图形属性,修改视图原点,以打印当前页面,如果没有设置文档长度,在文档末尾终止打印循环(CprintInfo::m_bContinuePrinting赋值FALSE) |
CView::OnPrint() | 调用OnDraw进行输出;调用OnDraw前选择OnBeginPrinting分配的字体,调用OnDraw后取消对象,打印只出现在文档打印版中的页头和页脚,如果打印输出与屏幕输出的外观不同, 在这里打印,而不是调用OnDraw |
CView::OnEndPrinting() | 调用Cgdi::DeleteObject删除OnBeginPrinting分配的对象 |
2、打印和显示屏幕不一样的地方
每英寸点数不同,所以往打印DC,和往屏幕DC里绘制时,需要做一些转换
void CxxView::OnPrint(CDC *pDC, CPrintInfo *pInfo)
{
// Print zoom is the difference between screen-
// and printer resolution.
CClientDC dc( this );
int n = dc.GetDeviceCaps( LOGPIXELSX );
int n1 = pDC->GetDeviceCaps( LOGPIXELSX );
}