我通过打印对话框获得当前打印机环境,
但我想跳过这个对话框直接打印请问应该怎么做?
我的程序需要用的是针式打印机,我想打完直接停止,不要把当前这页纸走过去。
就是要即打即走不论页数的打,内容有多长就打多长。
我的打印程序如下,希望大家帮忙指导。
最好在我的现有程序基础上改动或者能够给出更好的方案代码。万分感谢还有那个打印的物理和逻辑坐标我不是太明白,哪里有详细介绍这个的资料吗?
可以把网址贴给我,一样给分。CPrintDialog dlg(FALSE,PD_NOPAGENUMS|PD_NOSELECTION,this);
if(dlg.DoModal()==IDOK)
{
CDC dc;
dc.Attach(dlg.GetPrinterDC());
DOCINFO di;
di.cbSize=sizeof(DOCINFO);
di.lpszDocName="SimplePrintDoc";
di.lpszOutput=NULL;
di.lpszDatatype=NULL;
di.fwType=0;
dc.StartDoc(&di); 
dc.SetMapMode(MM_HIENGLISH);
CRect rectPrint(0,0,dc.GetDeviceCaps(HORZRES),dc.GetDeviceCaps(VERTRES));
dc.DPtoLP(&rectPrint);
dc.SetWindowOrg(0, -rectPrint.bottom);
CFont font;
VERIFY(font.CreatePointFont(120, "Arial", &dc));
CFont* def_font = dc.SelectObject(&font);
dc.SetTextAlign(TA_TOP|TA_LEFT);

//具体数据打印
int x = 300;
int y = 11000;
CSize size = dc.GetTextExtent("00", 2);
dc.TextOut(x+2000,y,"公司销售单");
y-=2*size.cy;
dc.MoveTo(x,y);
dc.LineTo(x+7000,y);
y-=size.cy/2;
dc.TextOut(x,y,"编号");
dc.TextOut(x+1400,y,"名称");
dc.TextOut(x+3500,y,"单价");
dc.TextOut(x+4400,y,"数量");
dc.TextOut(x+5300,y,"单位");
dc.TextOut(x+6200,y,"金额");
y-=size.cy;
CString pjStr;
int lCount=m_List.GetItemCount();
for(int i=0;i<lCount;i++)
{
pjStr=m_List.GetItemText(i,0);dc.TextOut(x,y,pjStr);
pjStr=m_List.GetItemText(i,1);dc.TextOut(x+1400,y,pjStr);
pjStr=m_List.GetItemText(i,2);dc.TextOut(x+3500,y,pjStr);
pjStr=m_List.GetItemText(i,3);dc.TextOut(x+4400,y,pjStr);
pjStr=m_List.GetItemText(i,4);dc.TextOut(x+5300,y,pjStr);
pjStr=m_List.GetItemText(i,5);dc.TextOut(x+6200,y,pjStr);
y-=size.cy;
}
y-=size.cy/2;
dc.MoveTo(x,y);
dc.LineTo(x+7000,y);
y-=size.cy;
dc.TextOut(x+1800,y,"此销售单望客户妥善保管,丢失不补!");
dc.SelectObject(def_font); 
font.DeleteObject(); 
dc.EndDoc();
DeleteDC(dc.Detach()); 
}

解决方案 »

  1.   

    不知道 你碰到了什么问题,
     如果  你不想让 打印对话框出来, 那你只有自己保存 犹如 打印机端口啊,名字
      再你下次 要打印的时候,就可以通过enumprinter取得 打印机的 hPrinter 
       这样才可以,
      

  2.   

    BOOL CPrint::InitPrint()
    {
    CPrintDialog printDlg(FALSE);
    //
    // if (printDlg.DoModal() == IDCANCEL) return false;显示对话框
    //
    if(!printDlg.GetDefaults()) 跳过对话框直接打印
    {
    return FALSE;
    }
    printDlg.GetDevMode()->dmOrientation = 1;
    printdc.Attach(printDlg.CreatePrinterDC());
    printdc.m_bPrinting = TRUE;
    printdc.SetMapMode(MM_LOMETRIC);   打印方式,具体可以参照MSDN
    //
    CString szTitle;
    szTitle.LoadString(AFX_IDS_APP_TITLE);
    //
    ::ZeroMemory (&di, sizeof (DOCINFO));
    di.cbSize = sizeof (DOCINFO);
    di.lpszDocName = szTitle;
    return true;
    }
      

  3.   

    补充,
    用DrawText比较好,不会到别的打印机上产生变形什么的
      

  4.   

    感谢 tyjoe(天乐) 请继续帮忙啊,解决问题我再送300
    自己再UP