vc 如何在程序中设定打印机的纸张大小;注意win98和winnt,win2000需同时支持。

解决方案 »

  1.   

    CPrintDialog mypd(0);          // 构造打印设置对话框对象,但不显示
    mypd.GetDefaults();           // 检取缺省打印设备的设备环境
    DEVMODE * dm = mypd.GetDevMode(); // 提取缺省打印机的DEVMODE数据
    dm->dmPaperSize = DMPAPER_USER; // 由用户自定义纸张。用DEVMODE中的专用串可定义各种类型的纸张,但下面两个值不需要设置
    dm->dmPaperLength = printhigh; // 定义纸张长度
    dm->dmPaperWidth = printwidth; // 定义纸张宽度
    CDC dc;
    dc.CreateDC(mypd.GetDriverName(),mypd.GetDeviceName(),mypd.GetPortName(),dm);然后使用dc就可以了
      

  2.   

    补充一句:以上的代码在98,2000,me下运行正常,在NT下没有试过。
      

  3.   

    void CRightUpView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo) 
    {
        DEVMODE *dp=pInfo->m_pPD->GetDevMode(); //    提取缺省打印机的DEVMODE数据//第一种
        dp->dmPaperSize  = DMPAPER_A4; //A4用紙
        dp->dmOrientation = DMORIENT_PORTRAIT; //横向き/*  //第三种
        dp->dmFields |= DM_PAPERSIZE;
        dp->dmOrientation = DMORIENT_PORTRAIT;  
        dp->dmPaperSize  = 0;
        dp->dmPaperLength = 230;   // 定义纸张长度
        dp->dmPaperWidth = 316;   // 定义纸张宽度
    */
    /*  //第三种
        dp->dmFields |= DM_PAPERSIZE;
        dp->dmOrientation = DMORIENT_PORTRAIT;  
        dp->dmPaperSize  = DMPAPER_USER;  // 由用户自定义纸张。
        dp->dmPaperLength = 230;   // 定义纸张长度
        dp->dmPaperWidth = 316;   // 定义纸张宽度
    */
        pDC->ResetDC(dp);
    }
    在上面的代码中第一种运行正常;第二种,第三种方法运行时出错。请问为什么?