POS机票据打印_第1页
POS机票据打印_第2页
POS机票据打印_第3页
POS机票据打印_第4页
POS机票据打印_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、票据打印工作任务:在Windows平台,通过调用CPrintDialog,实现POS机上的票据打印。设备:佳博GP-5860III最后实现的打印效果图,如下:代码主要功能:1. 调用CPrintDialog,使用默认打印机打印。2. 调用CreateFont,创建打印字体。3. StartPage EndPage完成一页文档的打印。其中关键的几点:1. 当一行显示不下产品信息内容时,如何自动换行。2. 如何调整打印字体的大小。下面是实现打印功能时,分别封装的几个函数。void CPosDemoDlgMain:PrintNote() /Get the default printer CPrint

2、Dialog dlg(FALSE); dlg.GetDefaults(); /Is a default printer set up? HDC hdcPrinter = dlg.GetPrinterDC(); if (hdcPrinter = NULL) MessageBox(_T(Printer not found!); else /Create a CDC and attach it to the default printer CDC dcPrinter; dcPrinter.Attach(hdcPrinter); /Call StartDoc() to begin printing D

3、OCINFO docinfo; memset(&docinfo, 0, sizeof(docinfo); docinfo.cbSize = sizeof(docinfo); docinfo.lpszDocName = _T(CDC:StartDoc() Code Fragment); /If it fails, complain and exit gracefully if (dcPrinter.StartDoc(&docinfo) 0) MessageBox(_T(Printer not initalized.); else /Start a page if (dcPrinter.Start

4、Page() m_hDC,10,sy,362,115,dcMem,0,0,SRCCOPY); /* :StretchBlt(pdc-m_hDC, 0, 0, 380, 170, dcMem,0,0,575,178,SRCCOPY); */ :SelectObject(dcMem,hOldBmp); :DeleteDC(dcMem); :DeleteObject(hBitmap);void CPosDemoDlgMain:printDate(CDC* pdc,INT sy) SYSTEMTIME st; INT y = sy; WCHAR wcMonth12=_T(JAN),_T(FEB),_T

5、(MAR),_T(APR),_T(MAY),_T(JUN), _T(JUL),_T(AUG),_T(SEP),_T(OCT),_T(NOV),_T(DEC); WCHAR am_pm =_T(am); CString strDate; GetLocalTime(&st); if(st.wHour 12) /Set up extension. wcscpy( am_pm, _T(pm); if(st.wHour 12) /Convert from 24-hour st.wHour -= 12; /to 12-hour clock. if(st.wHour = 0) /Set hour to 12

6、 if midnight. st.wHour = 12; strDate.Format(_T(%2d %s %4d %02d:%02d%s),st.wDay, wcMonthst.wMonth-1, st.wYear, st.wHour,st.wMinute,am_pm); pdc-TextOut(5, y, strDate, strDate.GetLength(); y += 38; pdc-MoveTo(2,y); pdc-LineTo(420,y);INT CPosDemoDlgMain:printProductList(CDC* pdc, INT sy)UINT i; INT x, y

7、 = sy; INT WIDTH = 188; INT len = 0, height, left, width; CRect rc(2,y,WIDTH,y+40); ProductList *pProduct = NULL;for (i=0; iDrawText(pProduct-wsName, -1, &rc, DT_CALCRECT|DT_LEFT|DT_TOP|DT_WORDBREAK); pdc-DrawText(pProduct-wsName, -1, &rc, DT_LEFT|DT_TOP|DT_WORDBREAK); /draw number width = 20; rc.ri

8、ght = rc.left + WIDTH; rc.right += 10; rc.right += width; rc.left = rc.right - width; pdc-DrawText(pProduct-wsNum, -1, &rc, DT_RIGHT|DT_TOP); width = 6; rc.right += 2; rc.right += width; rc.left = rc.right - width; pdc-DrawText(Lx, -1, &rc, DT_CENTER|DT_TOP); /draw price width = 70; rc.right += 2; r

9、c.right += width; rc.left = rc.right - width; pdc-DrawText(pProduct-wsPrice, -1, &rc, DT_RIGHT|DT_TOP|DT_SINGLELINE); /draw sub-total width = 80; rc.right += 2; rc.right += width; rc.left = rc.right - width; pdc-DrawText(pProduct-wsSubTotal, -1, &rc, DT_RIGHT|DT_TOP|DT_SINGLELINE); y += height + 14;

10、 /10: 如果下一行也换行,会打印乱码; 12: 不会乱码; 但为了安全起见,上下两行间隔14个像素。 pdc-MoveTo(2,y); pdc-LineTo(420,y); return y;void CPosDemoDlgMain:printTotal(CDC* pdc, INT sy)UINT i; INT x, y = sy; INT len = 0, line = 0; const INT LEFT = 2, RIGHT = 382, LINE_HEIGHT = 30; const INT TITLE_WIDTH = 100, NUM_WIDTH = 100; CRect rc(2

11、,y,220,y+LINE_HEIGHT);WCHAR wsBuffer256; rc.left = LEFT; rc.top = y; /draw Tax rc.top = y + line * LINE_HEIGHT; rc.bottom = rc.top + LINE_HEIGHT; rc.right = rc.left + TITLE_WIDTH; pdc-DrawText(LTax, -1, &rc, DT_LEFT|DT_TOP); rc.left = RIGHT - NUM_WIDTH; rc.right = RIGHT; swprintf(wsBuffer, L%d.%02d,

12、 0, 0);pdc-DrawText(wsBuffer, -1, &rc, DT_RIGHT|DT_TOP); line+; /= /draw total rc.top = y + line * LINE_HEIGHT; rc.bottom = rc.top + LINE_HEIGHT; rc.left = LEFT; rc.right = rc.left + TITLE_WIDTH; pdc-DrawText(LTotal, -1, &rc, DT_LEFT|DT_TOP); rc.left = RIGHT - NUM_WIDTH; rc.right = RIGHT;swprintf(ws

13、Buffer, L%d.%02d, gTotalPrice/100, gTotalPrice%100);pdc-DrawText(wsBuffer, -1, &rc, DT_RIGHT|DT_TOP); line+; /= /draw payment rc.top = y + line * LINE_HEIGHT; rc.bottom = rc.top + LINE_HEIGHT; rc.left = LEFT; rc.right = rc.left + TITLE_WIDTH; pdc-DrawText(LPayment, -1, &rc, DT_LEFT|DT_TOP); rc.left

14、= RIGHT - NUM_WIDTH; rc.right = RIGHT;swprintf(wsBuffer, L%d.%02d, m_Payment/100, m_Payment%100);pdc-DrawText(wsBuffer, -1, &rc, DT_RIGHT|DT_TOP); line+; /= /draw cash change rc.top = y + line * LINE_HEIGHT; rc.bottom = rc.top + LINE_HEIGHT; rc.left = LEFT; rc.right = rc.left + TITLE_WIDTH; pdc-DrawText(LChange, -1, &rc, DT_LEFT|DT_TOP); rc.left = RIGHT - NUM_WIDTH; rc.right = RIGHT;if (m_Payment DrawText(wsBuff

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论