如何才能正确完成多页内容的打印预览
编号:QA001992
建立日期: 1999年11月8日 最后修改日期:2001年4月12日
所属类别:
网络闲人:
操作系统: Windows'98
编程工具: VC++6.0
问题:
CView或者CFormView类的打印预览功能中为什么只能显示第一页,当点击"下一页"时页码改变,但是内容不变,请问应该如何设置,才能使它们正确完成多页内容的打印预览?
代码如下:
OnDraw()
{
CString str;
for(int i=0;i<=2000;i+=30)
{
str.Format("第%d次感谢问专家栏目!",i);
pDC->TextOut(10,i,str);
}
}
OnPrint()
{
OnDraw(pDC);
}
回答:
多页打印时,OnPrint的代码和OnDraw的代码是不一样的。
首先,应该在OnPreparePrinting指定打印的页码范围。下面的例子假定每页可以打印50行。
BOOL CMdiView::OnPreparePrinting(CPrintInfo* pInfo)
{
pInfo->SetMaxPage(2000/30/50 + 1);
return DoPreparePrinting(pInfo);
}
这里的pInfo结构非常重要。建议查看一下帮助中关于CPrintInfo的介绍。
然后在OnPrint中根据pInfo->m_nCurPage(当前页号)逐页打印。每打一页,OnPrint就被调用一次。
void CMdiView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
CString str;
pDC->SetMapMode(MM_TEXT);
int nStart = 30 * 50 * (pInfo->m_nCurPage - 1);
int nEnd = nStart + 1500;
if(nEnd>2000) nEnd = 2000;
for(int i=nStart ;i< nEnd;i+=30)
{
str.Format("第%d次感谢问专家栏目!",i);
pDC->TextOut(10,(i-nStart)*2,str);
}
}
辉的意见:
在OnPreparePrinting中加入pInfo->SetMaxPage();
在OnPrint()中修改为如下代码:
int v_length;
v_length=(pInfo->m_nCurPage-1)*pInfo->m_rectDraw.Height();
pDC->SetWindowOrg(pInfo->m_rectDraw.left,v_length);
OnDraw(pDC);
此问题由李海回答。
| |
|
|
| |
|
|