📄 printer.cpp
字号:
// Printer.cpp: implementation of the CPrinter class.
//
//////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <windows.h>
#include <string.h>
#include <stdlib.h>
#include "Printer.h"
extern int iCount = 0;
//////////////////////////////////////////////////////////////////////
CPrinter::CPrinter()
{
}
CPrinter::~CPrinter()
{
gCom.AsynClose();
}
short CPrinter::OnOpencom(int nPort,int nBaut)
{
// TODO: Add your control notification handler code here
gCom.SetupParam(nPort,nBaut,'N',8,1);
int ret=gCom.AsynOpen();
return ret;
}
void CPrinter::OnCloseCom()
{
// TODO: Add your control notification handler code here
gCom.AsynClose();
iCount = 0;
}
void CPrinter::OnCut(int line)
{
// TODO: Add your control notification handler code here
char szSendBuf[20];
/* memset(szSendBuf1,'\0',20);
szSendBuf1[0]=0x1b;
szSendBuf1[1]=0x64;
szSendBuf1[2]=line;
gCom.AsynSendData(szSendBuf1,3);
char szSendBuf[20];
memset(szSendBuf,'\0',20);
szSendBuf[0]=0x1b;
szSendBuf[1]=0x4e;
szSendBuf[2]=1;
szSendBuf[3]=1;
gCom.AsynSendData(szSendBuf,4);
memset(szSendBuf,'\0',20);
szSendBuf[0]=0x1b;
szSendBuf[1]=0x4e;
szSendBuf[2]=3;
szSendBuf[3]=0;
gCom.AsynSendData(szSendBuf,4);
memset(szSendBuf,'\0',20);
szSendBuf[0]=0x1d;
szSendBuf[1]=0x56;
szSendBuf[2]= 48;*/
memset(szSendBuf,'\0',20);
szSendBuf[0]=0x1d;
szSendBuf[1]=0x56;
szSendBuf[2]= 0x42;
szSendBuf[3]= 0x00;
szSendBuf[4]= '\n';
szSendBuf[5]= '\n';
gCom.AsynSendData(szSendBuf,6);
memset(szSendBuf,'\0',10);
szSendBuf[0]=0x1b;
szSendBuf[1]=0x6d;
gCom.AsynSendData(szSendBuf,2);
}
short GetBinBuf(short val,char *buf)
{
switch(val)
{
case 0:
memcpy(buf,"0000",4);
break;
case 1:
memcpy(buf,"0001",4);
break;
case 2:
memcpy(buf,"0010",4);
break;
case 3:
memcpy(buf,"0011",4);
break;
case 4:
memcpy(buf,"0100",4);
break;
case 5:
memcpy(buf,"0101",4);
break;
case 6:
memcpy(buf,"0110",4);
break;
case 7:
memcpy(buf,"0111",4);
break;
case 8:
memcpy(buf,"1000",4);
break;
case 9:
memcpy(buf,"1001",4);
break;
case 10:
memcpy(buf,"1010",4);
break;
case 11:
memcpy(buf,"1011",4);
break;
case 12:
memcpy(buf,"1100",4);
break;
case 13:
memcpy(buf,"1101",4);
break;
case 14:
memcpy(buf,"1110",4);
break;
case 15:
memcpy(buf,"1111",4);
break;
default:
return 1; //计算错误
}
return 0; //计算成功
}
short ByteToBytes(short value,char *buf)
{
char low_byte,high_byte,low_buf[5],high_buf[5];
short ret1,ret2;
memset(low_buf,'\0',5);
memset(high_buf,'\0',5);
if(value<0 || value>255)
return 2; //非法值
low_byte=value%16;
high_byte=value/16;
ret1=GetBinBuf(low_byte,low_buf);
ret2=GetBinBuf(high_byte,high_buf);
if(ret1!=0 || ret2!=0)
return 1; //计算错误
memcpy(buf,high_buf,4);
memcpy(buf+4,low_buf,4);
return 0;
}
int CPrinter::OnStatus(char *buffer1,char *buffer2,char *buffer3, char *buffer4)
{
// TODO: Add your control notification handler code here
char szSendBuf[20],buf[20];
int ret,back;
/////////////////1
memset(szSendBuf,'\0',20);
szSendBuf[0]=0x10;
szSendBuf[1]=0x04;
szSendBuf[2]=1;
gCom.AsynSendData(szSendBuf,3);
ret=gCom.sReadByLen(1,2);
if(ret<1)
{
return -1 ;
}
back=gCom.chRcvbuf[0];
ret=ByteToBytes(back,buffer1);
strrev(buffer1);
if(ret!=0)
{
return -1;
}
////////2
memset(szSendBuf,'\0',20);
szSendBuf[0]=0x10;
szSendBuf[1]=0x04;
szSendBuf[2]=2;
gCom.AsynSendData(szSendBuf,3);
ret=gCom.sReadByLen(1,2);
if(ret<1)
{
//SetInfo("通讯失败\n");
return -1;
}
back=gCom.chRcvbuf[0];
memset(buf,'\0',20);
ret=ByteToBytes(back,buffer2);
strrev(buffer2);
if(ret!=0)
{
//SetInfo("通讯失败\n");
return -1;
}
/////////////3
memset(szSendBuf,'\0',20);
szSendBuf[0]=0x10;
szSendBuf[1]=0x04;
szSendBuf[2]=3;
gCom.AsynSendData(szSendBuf,3);
ret=gCom.sReadByLen(1,2);
if(ret<1)
{
//SetInfo("通讯失败\n");
return -1;
}
back=gCom.chRcvbuf[0];
memset(buf,'\0',20);
ret=ByteToBytes(back,buffer3);
strrev(buffer3);
if(ret!=0)
{
//SetInfo("通讯失败\n");
return -1;
}
////////////////4
memset(szSendBuf,'\0',20);
szSendBuf[0]=0x10;
szSendBuf[1]=0x04;
szSendBuf[2]=4;
gCom.AsynSendData(szSendBuf,3);
ret=gCom.sReadByLen(1,2);
if(ret<1)
{
//SetInfo("通讯失败\n");
return -1;
}
back=gCom.chRcvbuf[0];
memset(buf,'\0',20);
ret=ByteToBytes(back,buffer4);
strrev(buffer4);
if(ret!=0)
{
//SetInfo("通讯失败\n");
return -1;
}
return 0;
/****************************
char szSendBuf[20],buf[20];
int ret,back;
/////////////////1
memset(szSendBuf,'\0',20);
szSendBuf[0]=0x10;
szSendBuf[1]=0x04;
szSendBuf[2]=1;
gCom.AsynSendData(szSendBuf,3);
ret=gCom.sReadByLen(1,2);
if(ret<1)
{
return ;
}
back=gCom.chRcvbuf[0];
memset(buf,'\0',20);
ret=ByteToBytes(back,buf);
strrev(buf);
if(ret!=0)
{
return ;
}
if(buf[3]=='1')
{
//SetInfo("打印机状态->离线/在线:离线\n");
}
else
{
//SetInfo("打印机状态->离线/在线:在线\n");
}
if(buf[5]=='1')
{
//SetInfo("打印机状态->是否等待再线恢复:正在等待再线恢复\n");
}
else
{
//SetInfo("打印机状态->是否等待再线恢复:不在等待再线恢复\n");
}
////////2
memset(szSendBuf,'\0',20);
szSendBuf[0]=0x10;
szSendBuf[1]=0x04;
szSendBuf[2]=2;
gCom.AsynSendData(szSendBuf,3);
ret=gCom.sReadByLen(1,2);
if(ret<1)
{
//SetInfo("通讯失败\n");
return;
}
back=gCom.chRcvbuf[0];
memset(buf,'\0',20);
ret=ByteToBytes(back,buf);
strrev(buf);
if(ret!=0)
{
//SetInfo("通讯失败\n");
return;
}
if(buf[3]=='1')
{
//SetInfo("打印机状态->按键进纸:按键进纸过程中\n");
}
else
{
//SetInfo("打印机状态->按键进纸:无进纸\n");
}
if(buf[5]=='1')
{
//SetInfo("打印机状态->纸尽停止打印:发生无纸停止打印\n");
}
else
{
//SetInfo("打印机状态->纸尽停止打印:有纸\n");
}
if(buf[6]=='1')
{
//SetInfo("打印机状态->故障状态:发生故障\n");
}
else
{
//SetInfo("打印机状态->故障状态:无故障\n");
}
/////////////3
memset(szSendBuf,'\0',20);
szSendBuf[0]=0x10;
szSendBuf[1]=0x04;
szSendBuf[2]=3;
gCom.AsynSendData(szSendBuf,3);
ret=gCom.sReadByLen(1,2);
if(ret<1)
{
//SetInfo("通讯失败\n");
return;
}
back=gCom.chRcvbuf[0];
memset(buf,'\0',20);
ret=ByteToBytes(back,buf);
strrev(buf);
if(ret!=0)
{
//SetInfo("通讯失败\n");
return;
}
if(buf[2]=='1')
{
//SetInfo("打印机状态->机械故障:发生机械故障\n");
}
else
{
//SetInfo("打印机状态->机械故障:无机械故障\n");
}
if(buf[3]=='1')
{
//SetInfo("打印机状态->切刀故障:发生切刀故障\n");
}
else
{
//SetInfo("打印机状态->切刀故障:无切刀故障\n");
}
if(buf[5]=='1')
{
//SetInfo("打印机状态->不可恢复故障:发生不可恢复故障\n");
}
else
{
//SetInfo("打印机状态->不可恢复故障:无不可恢复故障\n");
}
if(buf[6]=='1')
{
//SetInfo("打印机状态->可自动恢复故障:发生可自动恢复故障\n");
}
else
{
//SetInfo("打印机状态->可自动恢复故障:无可自动恢复故障\n");
}
////////////////4
memset(szSendBuf,'\0',20);
szSendBuf[0]=0x10;
szSendBuf[1]=0x04;
szSendBuf[2]=4;
gCom.AsynSendData(szSendBuf,3);
ret=gCom.sReadByLen(1,2);
if(ret<1)
{
//SetInfo("通讯失败\n");
return;
}
back=gCom.chRcvbuf[0];
memset(buf,'\0',20);
ret=ByteToBytes(back,buf);
strrev(buf);
if(ret!=0)
{
//SetInfo("通讯失败\n");
return;
}
if(buf[3]=='1')
{
//SetInfo("打印机状态->纸将尽开关检测状态:纸将尽\n");
}
else
{
//SetInfo("打印机状态->纸将尽开关检测状态:有纸\n");
}
if(buf[5]=='1')
{
//SetInfo("打印机状态->纸尽开关检测状态:无纸\n");
}
else
{
//SetInfo("打印机状态->纸尽开关检测状态:有纸\n");
}
****************************/
}
//font = 0正常字体;4倍宽;8倍高 (只对汉字起作用)
void CPrinter::OnPrint(int font,char * PrintData)
{
// TODO: Add your control notification handler code here
if (iCount==50)
{
Sleep(1000);
iCount = 0;
}
char szSendBuf[1000];
memset(szSendBuf,'\0',1000);
/* szSendBuf[0]=0x1c;
szSendBuf[1]=0x21;
szSendBuf[2]=font;
gCom.AsynSendData(szSendBuf,3);*/
memset(szSendBuf,'\0',1000);
strcpy(szSendBuf,PrintData);
gCom.AsynSendData(szSendBuf,strlen(szSendBuf));
iCount++;
}
short CPrinter::SendPageEnd(int nDot,char cInfo, char *szSendBuf)
{
// int ret;
int nTempDot;
memset(szSendBuf,'\0',20);
szSendBuf[0] = 0x1d;
szSendBuf[1] = 0x28;
szSendBuf[2] = 0x46;
szSendBuf[3] = 0x04;
szSendBuf[4] = 0x00;
szSendBuf[5] = cInfo;
szSendBuf[6] = 0x00;
nTempDot = nDot;
szSendBuf[7] = (BYTE)(nTempDot & 0xff);
szSendBuf[8] = (BYTE)( nTempDot >> 8);
gCom.AsynSendData(szSendBuf,9);
/* ret=gCom.sReadByLen(1,2);
if(ret < 1)
{
return -1 ; // 超时
}*/
return 0;
}
short CPrinter::SendCutPage(char *szSendBuf)
{
memset(szSendBuf,'\0',10);
szSendBuf[0] = 0x1b;
szSendBuf[1] = 0x69;
gCom.AsynSendData(szSendBuf,2);
return 0;
}
short CPrinter::SendTestBlack(char *szSendBuf)
{
memset(szSendBuf,'\0',10);
szSendBuf[0] = 0x1b;
szSendBuf[1] = 0x0c;
gCom.AsynSendData(szSendBuf,2);
return 0;
}
short CPrinter::SendStartPrtH(char *szSendBuf)
{
memset(szSendBuf,'\0',10);
szSendBuf[0] = 0x1D;
szSendBuf[1] = 0x0c;
gCom.AsynSendData(szSendBuf,2);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -