16,471
社区成员
发帖
与我相关
我的任务
分享
void Print()
{
//获取打印的X Y
this->UpdateData();
dwStartX = atoi(m_strPointX);
dwStartY = atoi(m_strPointY);
//获取打印机
CString strPrintDevice = "";
this->GetDlgItem(IDC_COMBO1)->GetWindowText(strPrintDevice);
if (strPrintDevice.IsEmpty()){
AfxMessageBox(_T("打印失败"));
return;
}
DWORD dwFlag = PD_ALLPAGES | PD_NOPAGENUMS | PD_USEDEVMODECOPIES | PD_HIDEPRINTTOFILE;
CPrintDialog pPrintdlg(FALSE, dwFlag, this);
HGLOBAL hDevMode = NULL;
HGLOBAL hDevNames = NULL;
if (GetPrinterDevice(strPrintDevice.GetBuffer(0), &hDevNames, &hDevMode)) {
AfxGetApp()->SelectPrinter(hDevNames, hDevMode);
}
else {
AfxMessageBox(_T("Failed to select custom printer"));
}
strPrintDevice.ReleaseBuffer();
pPrintdlg.m_pd.hDevMode = hDevMode;
pPrintdlg.m_pd.hDevNames = hDevNames;
CDC dc;
BOOL InvalidatePrint = dc.Attach(pPrintdlg.CreatePrinterDC());
DOCINFO di;
di.cbSize = sizeof(DOCINFO);
di.lpszDocName = _T("TAPCQRCODE");
di.lpszDatatype = NULL;
di.lpszOutput = NULL;
di.fwType = 0;
if (dc.StartDoc(&di)==-1) {
dc.EndDoc();
AfxMessageBox(_T("打印错误"));
return;
}
dc.StartPage();
dc.SetMapMode(MM_TEXT);
CRect recPrint(0, 0, dc.GetDeviceCaps(LOGPIXELSX), dc.GetDeviceCaps(LOGPIXELSY));
dc.DPtoLP(&recPrint);
dc.SetWindowOrg(0, 0);
//打印字体
CFont newFont;
VERIFY(newFont.CreatePointFont(dwFontSize, _T("黑体"), &dc));
CFont* oldFont = dc.SelectObject(&newFont);
dc.SetTextAlign(TA_TOP|TA_LEFT);
SetTextColor(dc,RGB(0,0,0));
CString strIMEI;
strIMEI.Format("IMEI:%s", m_strIMEI.Mid(0, IMEI_LENTH));
CRect rc;
rc.left = dwStartX+ dwQrCodeWidth + dwGapQRCodeString;
rc.top = dwStartY;
rc.right = rc.left+dwTextWidth;
rc.bottom= rc.top+ dwQrCodeWidth;
//打印流水号1
CString strPrint;
strPrint.Format("%s\n%s",m_strType, m_strName);
dc.DrawText(strPrint,rc,DT_VCENTER|DT_LEFT);
CFont newFontIMEI;
VERIFY(newFontIMEI.CreatePointFont(58, _T("黑体"), &dc));
dc.SelectObject(&newFontIMEI);
rc.left = dwStartX+ dwQrCodeWidth + dwGapQRCodeString;
rc.top = dwStartY+dwIMEIOffset;
rc.right = rc.left+dwTextWidth;
rc.bottom= rc.top+ dwQrCodeWidth+dwIMEIOffset;
//打印流水号 2
strPrint.Format("%s\n%s",strIMEI,m_strSN);
dc.DrawText(strPrint,rc,DT_VCENTER|DT_LEFT);
dc.SelectObject(oldFont);
newFont.DeleteObject();
newFontIMEI.DeleteObject();
dc.EndPage();
dc.EndDoc();
DeleteDC(dc.Detach());
}
DWORD dwFlag=PD_ALLPAGES | PD_NOPAGENUMS | PD_USEDEVMODECOPIES | PD_SELECTION | PD_HIDEPRINTTOFILE | PD_RETURNDEFAULT;
CPrintDialog dlg(FALSE,dwFlag,NULL);
if (dlg.DoModal() == IDOK)
{
//定义打印纸的大小
LPDEVMODE dev = dlg.GetDevMode();
dev->dmPaperSize = DMPAPER_USER;
dev->dmPaperLength = 200 * 10; //打印纸长度
dev->dmPaperWidth = 100 * 10; //打印纸宽度
dev->dmOrientation = DMORIENT_LANDSCAPE;
dev->dmFields = DM_PAPERSIZE | DM_PAPERWIDTH | DM_PAPERLENGTH | dev->dmFields;
CDC dc;
dc.Attach(dlg.GetPrinterDC()); //获得打印机设备上下文
dc.ResetDC(dev);
CFont TextFont;
TextFont.CreatePointFont(150,"宋体",&dc); //设置字体
dc.StartDoc("print"); //开始打印
dc.SelectObject(&TextFont); //选入字体
dc.TextOut(200,200,"山无棱,江水为竭,冬雷震震,夏雨雪,天地合,乃敢与君绝!");
dc.EndDoc(); //结束打印
TextFont.DeleteObject();
dc.DeleteDC();
}