⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 printer.cpp

📁 很好的热敏打印机测试程序VC编写
💻 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 + -