热情软件屋

 

如何才能正确完成多页内容的打印预览


编号: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);

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio