在我我的程序里要打印一些报告,但是这些报告不同的页有的要求横向打印的,有的要求纵向打印,所以我在OnPrint函数里有以下的程序:
char temp[10];
sprintf (temp, "page %d.", pInfo->m_nCurPage);
if (!GetDocument()->data)
return;
pDC->SetMapMode (MM_LOMETRIC);
CPrintDialog* ppd = pInfo->m_pPD;
LPDEVMODE lpDevMode = ppd->GetDevMode();
switch (pInfo->m_nCurPage)
{
case 1: //THE FIRST PAGE workspace5.Print(pDC,strDiagRslt);
break;
case 2: //第2页要求是纵向打印
                  lpDevMode->dmOrientation = DMORIENT_LANDSCAPE;
pDC->ResetDC(lpDevMode);
workspace2.Print(pDC); //2 0 0
break;
case 3:
         ......
但是这个写法第2页还是横向的,而第3页变成了纵向的,这时为什么?
如果这样写第2页变成了纵向的:
case 1: //THE FIRST PAGE
workspace5.Print(pDC,strDiagRslt); //5 0
lpDevMode->dmOrientation = DMORIENT_LANDSCAPE;
pDC->ResetDC(lpDevMode);
break;
case 2: // 纵向
                  workspace2.Print(pDC);
break;
但是这样我觉得不太舒服,可读性不是很好。
是不是我编的程序哪里还是不正确?

解决方案 »

  1.   

    我觉得每次lpDevMode取值是ppd的(lpDevMode = ppd->GetDevMode();)
    而更改的是pDC(pDC->ResetDC(lpDevMode);),所以会出现这种情况.
      

  2.   

    case 1: //THE FIRST PAGE
    workspace5.Print(pDC,strDiagRslt); //5 0
    break;
    case 2: // 横向的
                      lpDevMode->dmOrientation = DMORIENT_LANDSCAPE;
    //pDC->ResetDC(lpDevMode);
    pInfo->m_pPD->GetDC()->ResetDC(lpDevMode);
    workspace2.Print(pDC); //2 0 0
    break;
    楼上的意思是不是这么做,要是这样的问题更大了:第一次打印预览的时候,所有页还是纵向的,但是第二次预览的时候又全是横向的了
      

  3.   

    case 0: // 第1页
    workspace5.Print(pDC,strDiagRslt); //5 0
    break;
    case 1: // 第2页,横向的
                      ……印象里好像应该这样,你可以尝试以下,我很久没做记不清了~
      

  4.   

    char temp[10];
    sprintf (temp, "page %d.", pInfo->m_nCurPage);
    if (!GetDocument()->data)
    return;
    pDC->SetMapMode (MM_LOMETRIC);
    CPrintDialog* ppd = pInfo->m_pPD;
    LPDEVMODE lpDevMode = ppd->GetDevMode();
    switch (pInfo->m_nCurPage-1)
    {
    case 0: //THE FIRST PAGE workspace5.Print(pDC,strDiagRslt);
    break;
    case 1: //第2页要求是纵向打印
                      lpDevMode->dmOrientation = DMORIENT_LANDSCAPE;
    pDC->ResetDC(lpDevMode);
    workspace2.Print(pDC); //2 0 0
    break;
    case 2:
             ......
      

  5.   

    case 0;
    我的多试图文档打印时,pInfo->m_nCurPage获得的第一个值是1,不是0关注中
      

  6.   

    /************************************************************************/
    /* 设置系统打印模式       
    #define DMORIENT_PORTRAIT   1   //纵向
    #define DMORIENT_LANDSCAPE  2   //横向                                      */
    /************************************************************************/
    void SetLandscapeMode(int PrintMode)
    {
    PRINTDLG pd;
       pd.lStructSize=(DWORD)sizeof(PRINTDLG);
       BOOL bRet=GetPrinterDeviceDefaults(&pd);
       if(bRet)
       {
          // protect memory handle with ::GlobalLock and ::GlobalUnlock
          DEVMODE FAR *pDevMode=(DEVMODE FAR *)::GlobalLock(m_hDevMode);
          // set orientation to landscape
      if(PrintMode==1)//纵向打印
      pDevMode->dmOrientation=DMORIENT_PORTRAIT;
      else if(PrintMode==2)//横向打印
      pDevMode->dmOrientation=DMORIENT_LANDSCAPE;   
          ::GlobalUnlock(m_hDevMode);
       }
    }
      

  7.   

    楼主有马甲!
     koko1998(追印) = coordinate2003(哎呀)
      

  8.   

    楼主有马甲!
     koko1998(追印) = coordinate2003(哎呀)
    什么意思?