我通过打印对话框获得当前打印机环境,
但我想跳过这个对话框直接打印请问应该怎么做?
我的程序需要用的是针式打印机,我想打完直接停止,不要把当前这页纸走过去。
就是要即打即走不论页数的打,内容有多长就打多长。
我的打印程序如下,希望大家帮忙指导。
最好在我的现有程序基础上改动或者能够给出更好的方案代码。万分感谢还有那个打印的物理和逻辑坐标我不是太明白,哪里有详细介绍这个的资料吗?
可以把网址贴给我,一样给分。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());
}
但我想跳过这个对话框直接打印请问应该怎么做?
我的程序需要用的是针式打印机,我想打完直接停止,不要把当前这页纸走过去。
就是要即打即走不论页数的打,内容有多长就打多长。
我的打印程序如下,希望大家帮忙指导。
最好在我的现有程序基础上改动或者能够给出更好的方案代码。万分感谢还有那个打印的物理和逻辑坐标我不是太明白,哪里有详细介绍这个的资料吗?
可以把网址贴给我,一样给分。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());
}
解决方案 »
- CreateDevice失败,窗口句柄传递正常,Direct3DCreate9返回正常!
- VC如何实现移动文件时的替换选择框
- 请问LocalLock的作用?
- windows media player控件播放视频文件问题!!!!!!!!!!
- 请问怎么将CRichEditCtrl的光标设置到最后?调用SetWindowText后光标老在第一个字符处。
- 请问,怎么看VC的源程序?
- 急问:我在单文档窗口中中定义了多个SingleDocTemplate,请问我如何在他们之间切换.急,如果会,我再加分
- 就当散分了
- VC里用哪个函数求ASCII码?
- IStream, IPicture这接口定义不符合COM接口定义规范吧?
- 与对象的第一次亲密接触之一(我在试着将我的感觉用文字表示出来,感觉必有出入请各位高手指教)
- 图形界面???
如果 你不想让 打印对话框出来, 那你只有自己保存 犹如 打印机端口啊,名字
再你下次 要打印的时候,就可以通过enumprinter取得 打印机的 hPrinter
这样才可以,
{
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;
}
用DrawText比较好,不会到别的打印机上产生变形什么的
自己再UP