我用针式打印机,在WORD中自定义大小后,打印机停在了纸的长度位置
而我写的代码自定义了纸张的大小,却不能使打印机打印后停止在自定义长度的位置
它一直走的A4的长度...请各位朋友帮忙了请在本贴和另一帖留名,以便加分,谢谢
http://community.csdn.net/Expert/topic/4530/4530641.xml?temp=5.183047E-02

解决方案 »

  1.   

    你可以通过自定义纸张大小(改变DEVMODE的下列成员)
    DWORD  dmFields; 
    short dmOrientation;
    short dmPaperSize;
    short dmPaperLength;
    short dmPaperWidth;如何在 Windows NT 和 Windows 2000 中使用自定义页面大小打印
    http://support.microsoft.com/default.aspx?scid=kb;zh-cn;282474
      

  2.   

    测试代码
    void CtstDlg::OnBnClickedOk()

    CPrintDialog pdlg(FALSE);//,PD_NOPAGENUMS|PD_NOSELECTION,this);
    if(!pdlg.GetDefaults())
    {
    AfxMessageBox("cannot get the default printer!");
    return;
    } LPDEVMODE pDM = (LPDEVMODE)::GlobalLock(pdlg.GetDevMode());
    if (pDM==NULL)
    {
    AfxMessageBox("can't get the devmode struct");
    return;
    } pDM->dmPaperSize=DMPAPER_USER;
    pDM->dmPaperLength=1000;
    pDM->dmPaperWidth=2100;
    ::GlobalUnlock(pDM); HDC hDC;//的类成员变量
    hDC=pdlg.CreatePrinterDC();
    CDC dc;
    dc.Attach(pdlg.GetPrinterDC());
    if (!dc.Attach(hDC))
    {
    AfxMessageBox("cannot attach the dc");
    return;
    }
    dc.m_bPrinting=TRUE; CFont font;
    VERIFY(font.CreatePointFont(120, "宋体", &dc));//为DC创建字体
    CFont* def_font = dc.SelectObject(&font);//保存现在的字体

    DOCINFO di;
    di.cbSize = sizeof(DOCINFO);
    di.lpszDocName = "FarFly printing"; 
    di.lpszOutput = (LPTSTR) NULL; 
    di.lpszDatatype = (LPTSTR) NULL; 
    di.fwType = 0; 
    dc.StartDoc(&di);
    dc.StartPage();

    int line = 0;
    CString sftitle = "远飞电器有限公司";
    dc.TextOut(2,line++,sftitle,strlen(sftitle)); dc.EndPage();
    dc.EndDoc(); dc.SelectObject(def_font); //恢复原来的字体
    font.DeleteObject(); 
    DeleteDC(dc.Detach());  return;
    }
      

  3.   

    有试过http://support.microsoft.com/kb/q282474里介绍的dmFormName自定义页面大小
      

  4.   

    CPrintDialog dlg(TRUE); 
    PRINTDLG *pPrintDlg = &dlg.m_pd; 
    AfxGetApp()->GetPrinterDeviceDefaults(pPrintDlg); 
    DEVMODE* lpDevMode = (DEVMODE*)::GlobalLock(pPrintDlg->hDevMode); 
    ::GlobalUnlock(pPrintDlg->hDevMode); 
    //lpDevMode->dmFields |= -1; //设定为自定义纸张尺寸, 如果用其他预定义的纸张尺寸,把这一行去掉,用下一行 
    lpDevMode->dmPaperSize = DMPAPER_A3; //设定为 A3 纸 
        lpDevMode->dmOrientation = DMORIENT_LANDSCAPE;
      

  5.   

    方便留下邮箱,我可以发测试代码,朋友们帮忙测试一下,看看是什么问题,WORD明明是可以的,是不是不只是设置纸张尺寸,还有其它控制代码呢[email protected]
      

  6.   

    laiyiling(陌生人)的dmFormName很对,但是VB的例子,我试试