程序的打印是按 “宽孔打印纸”(纸张类型为:15X11 inch)设计的,可是打印机默认的纸张是A4,每次打印前都得先调整纸张类型,否则就错,打印机是LQ1600KIII模拟为CR3200+,如何将默认纸张类型改为“宽孔打印纸”,使得不用先调整纸张,直接可以正确打印?

解决方案 »

  1.   

    直接修改CPrintInfo::m_rectDraw的大小为你希望的纸张的大小试试。
      

  2.   

    pInfo->m_pPD->m_pd.lStructSize=(DWORD)sizeof(PRINTDLG);
    BOOL bRet=AfxGetApp()->GetPrinterDeviceDefaults(&(pInfo->m_pPD->m_pd));

    DEVMODE FAR *pDevMode=(DEVMODE FAR *)::GlobalLock(pInfo->m_pPD->m_pd.hDevMode);
    if(pDoc->b_printbar)
    {
    pDevMode->dmPaperSize = ……
    }
    ::GlobalUnlock(pInfo->m_pPD->m_pd.hDevMode);
      

  3.   

    DEVMODE* pDevMode;
    DEVNAMES* lpDevNames;
    LPTSTR lpszDeviceName;

        ///////////////////////////////////////////////////////////////////
        if(pApp->GetPrinterDeviceDefaults(&dlg.m_pd) == 0)
    {
    ::AfxMessageBox("错误!当前没有连接打印机!",MB_OK);
    return;
    }
    pDevMode = (DEVMODE*)GlobalLock(dlg.m_pd.hDevMode);
    lpDevNames = (LPDEVNAMES)GlobalLock(dlg.m_pd.hDevNames);
    lpszDeviceName = (LPTSTR )lpDevNames + lpDevNames->wDeviceOffset; if (::OpenPrinter((char *) pDevMode->dmDeviceName, &hPrinter, NULL) == FALSE)
    return;
    Len = DocumentProperties(NULL, NULL, lpszDeviceName, pDevMode, NULL, 0);
    pDevMode->dmPaperSize = DMPAPER_A4;
    lstrcpy((char *)pDevMode->dmFormName,"A4 210 *297 mm");  //这里    Len = DocumentProperties(NULL, hPrinter, lpszDeviceName, NULL, pDevMode, DM_IN_BUFFER);
    GlobalUnlock(dlg.m_pd.hDevMode);
    GlobalUnlock(dlg.m_pd.hDevNames);
      

  4.   


    {
    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->dmPaperSize = DMPAPER_A4;
    ::GlobalUnlock(pd.hDevMode);
    }
    }
      

  5.   

    不解???????,不是改为A4,是改默认纸张为“宽行打印纸(15X11 inch)”它对应的纸张类型代码我不知:(
      

  6.   

    我找一下有17*11的,没有15*11的,DMPAPER_11X17