if(pDC->IsPrinting())
{
DOCINFO docinfo;
memset(&docinfo, 0, sizeof(docinfo));
docinfo.cbSize = sizeof(docinfo);
docinfo.lpszDocName = _T("CDC::StartDoc() Code Fragment"); pDC->StartDoc(&docinfo);
if(page==1)
{
         pDC->StartPage();
pDC->TextOut(10,10,"page 1");
page++;
pDC->EndPage();
}
else
{
pDC->StartPage();
pDC->TextOut(10,10,"page 2");
page--;
pDC->EndPage();
}
pDC->EndDoc();
}以上代码在ondraw()中,运行时预缆可用,但打印不可用,跟踪到:if (dcPrint.EndPage() < 0 || !_AfxAbortProc(dcPrint.m_hDC, 0))
{
bError = TRUE;  //这里执行了!!!
break;
}把pdc->startdoc(),pdc->startpage(),pdc->endpage(),pdc->enddoc()去掉就没事了,但我要打两页。请问谁知道怎么回事?如何改?急!!!谢谢!!!

解决方案 »

  1.   

    如果你用的是View,可以在OnPreparePrinting中设置要打印的页数:
        pInfo->SetMaxPage(5); // 设置最大页数据为5
        pInfo->m_nCurPage = 1;                        // start printing at page# 1
    Startpage,stoppage是框架调用的.不是在OnDraw中调用的,
    你不要管它,在View 的 OnPrint( CDC *pDC, CPrintInfo *pInfo )
    中的pInfo->m_nCurPage即是当前要打印的页,可根据你要的绘制各页不同画面.
      

  2.   

    我前两天刚发了一个帖子,你可以看看
    http://expert.csdn.net/Expert/topic/1701/1701559.xml?temp=.8957636
    你如果是调用了MFC的打印,可以自己新建一菜单
    void CMainFrame::OnPrintOnDoublePage()//自己定义的菜单响应函数 

    CYourView *pView=NULL; 
    pView=(CYourView*)(this->GetActiveView());//你的视图对象指针。 
    if (pView==NULL){ 
    return; 

    pView->m_nMode=1;//表示正面
    pView->OnCmdMsg(ID_FILE_PRINT,NULL,NULL,NULL); 
    MessageBox("请将打印纸的反面放入打印机,按OK继续。"); 
    pView->m_nMode=2;//表示反面 
    pView->OnCmdMsg(ID_FILE_PRINT,NULL,NULL,NULL); 
    }
      

  3.   

    应在OnPraparePrinting中控制当pView->m_nMode=2时不弹出打印对话框。
      

  4.   

    to jnxulei(石头) :
    谢谢你。我看了你的文章。但是我只想做一个简单打印程序:即在显示时显示很长的内容,然后打印时把它分成两页来打印就可以了。另外,我看到你的文章里也用了startdoc()、startpage()了,你是在什么地方调用的,在ondraw()中不能用吗?
      

  5.   

    再to jnxulei(石头) :如下
    void CMainFrame::OnMPrint()

          CTempView *pView=NULL; 
          。
    }编译时有错误
    error C2065: 'CTempView' : undeclared identifier好像
    CView是在CMainFrame后生成的,怎么办谢谢