请问我改怎么自定义打印纸张大小,就是在打印预览的时候可以看到我设置好的纸张大小,例如我设置的纸张是(500 X 500),那么就可以看到一个正方形的打印预览图,并且打印也会按照我设置的大小打印最好是有源码相送([email protected])

解决方案 »

  1.   

    看一下这些代码,主要是
    DEVMODE FAR *pDevMode=(DEVMODE FAR *)::GlobalLock(dlg.m_pd.hDevMode);

    pDevMode->dmPaperLength=5000;
    pDevMode->dmPaperWidth=5000;

    ::GlobalUnlock(dlg.m_pd.hDevMode);void PrintTest(){

    CPrintDialog dlg(FALSE, PD_ALLPAGES | PD_COLLATE | PD_NOPAGENUMS | PD_HIDEPRINTTOFILE);

    if(dlg.GetDefaults())

    {

    DEVMODE FAR *pDevMode=(DEVMODE FAR *)::GlobalLock(dlg.m_pd.hDevMode);

    pDevMode->dmPaperLength=5000;
    pDevMode->dmPaperWidth=5000;

    ::GlobalUnlock(dlg.m_pd.hDevMode);





    DOCINFO di;

    memset( &di, 0, sizeof(DOCINFO) );

    di.cbSize = sizeof(DOCINFO); 

    di.lpszDocName = "Printing Test"; 

    di.lpszOutput = (LPTSTR) NULL; 

    di.fwType = 0; 

    HDC hDC=dlg.CreatePrinterDC();

    CDC dc;

    dc.Attach(hDC);

    dc.StartDoc(&di); 

    dc.StartPage(); 

    dc.MoveTo(0,0);

    dc.LineTo(1000,1000);

    dc.EndPage(); 

    dc.EndDoc();  

    dc.DeleteDC(); 

    }

    }
      

  2.   

    忘掉一句,使用自定义纸张,必须设置pDevMode->dmPaperSize=0;
      

  3.   

    pDC->SetMapMode(MM_ANISOTROPIC);  //转换坐标映射方式
    CSize size = CSize(500, 500);
    pDC->SetWindowExt(size);  //确定窗口大小
      

  4.   

    greensofter(勇敢一点) 
    你的方式只是设置DC范围,不是设置纸张大小啊
      

  5.   

    是啊,但是都没有用啊,我都用了,都不能改变打印机的默认设置,纸张一直用的是
    8.5 x 11 in 即使我把dmPaperSize 设置为0然后把dmPelsWidth和dmPelsHeight设置为需要的大小
    到打印预览里面,仍然不起作用
      

  6.   

    我这里测试通过的一段代码,你给放到 C****App::InitInstance()的最后测试一下 PRINTDLG pd;
    pd.lStructSize=(DWORD)sizeof(PRINTDLG);
    BOOL bRet=AfxGetApp()->GetPrinterDeviceDefaults(&pd);
    if(bRet)
    {
    // protect memory handle with ::GlobalLock and ::GlobalUnlock
    DEVMODE FAR *pDevMode=(DEVMODE FAR *)::GlobalLock(pd.hDevMode);
    pDevMode->dmFields|=DM_PAPERSIZE;
    pDevMode->dmFields|=DM_PAPERLENGTH;
    pDevMode->dmFields|=DM_PAPERWIDTH;
    // pDevMode->dmOrientation=2;   
    pDevMode->dmPaperSize=0;

    pDevMode->dmPaperLength=2000;
    pDevMode->dmPaperWidth=2000;
    ::GlobalUnlock(pd.hDevMode);
    }