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

📄 ftp628.cpp

📁 FTP628打印驱动
💻 CPP
字号:
// FTP628.cpp: implementation of the FTP628 class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Com32.h"
#include "FTP628.h"
#include "windows.h"
#include <string.h>
#include "stdlib.h"
#include <iostream.h>

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#define FDWACCESS GENERIC_READ|GENERIC_WRITE
#define FDWATTRSANDFLAGS FILE_FLAG_OVERLAPPED
#define OPENSTYLE OPEN_EXISTING
#define OPENFAILE INVALID_HANDLE_VALUE
#define MAXBLOCK 4096
#define XON 0x11
#define XOFF 0x13
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CFTP628::CFTP628()
{
   m_Connected=false;
   dev=NULL;
   Port=1;
   BaudRate=9600;
   m_DataBits = 8;
   m_Parity = 0;
   m_StopBits = 1;
}

CFTP628::~CFTP628()
{

}

void CFTP628::SetPort(int iPort)
{
	CString s;
    FPort = iPort;
    s.Format("%d",FPort);
	AfxMessageBox(s);
}

int CFTP628::GetPort()
{
    Port = FPort;
	return FPort;
}

bool CFTP628::LinkPrinter()
{
	CString Com;
	COMMTIMEOUTS TimeOuts;
	DCB MyDCB;
	if (m_Connected) return true;
	Com.Format("COM%d",Port);
    dev = CreateFile((LPCTSTR)Com,FDWACCESS,0,NULL,OPENSTYLE,FDWATTRSANDFLAGS,0);
    if (dev==OPENFAILE)
	  return false;
    SetupComm(dev,MAXBLOCK,MAXBLOCK);
	SetCommMask(dev,EV_RXCHAR);

	//把间隔超时设置为最大,把总超时设置为0将导致ReadFile立即返回并完成操作
	TimeOuts.ReadIntervalTimeout = MAXDWORD;
	TimeOuts.ReadTotalTimeoutMultiplier =0;
	TimeOuts.ReadTotalTimeoutConstant =0;

	//设置写超时以指定WriteComm成员函数中的GetOverlappedResult 函数的等待时间
	TimeOuts.WriteTotalTimeoutMultiplier = 50;
	TimeOuts.WriteTotalTimeoutConstant = 2000;

	SetCommTimeouts(dev,&TimeOuts);

    GetCommState(dev,&MyDCB);
    MyDCB.BaudRate = BaudRate;    //波特率
	MyDCB.Parity = m_Parity;      //校验位
	MyDCB.StopBits = m_StopBits;  //停止位
	
	SetCommState(dev,&MyDCB);
    m_Connected = true;
	return true;      
    
}

bool CFTP628::ClosePrinter(void)
{
    if(!m_Connected) return true;
	m_Connected = false;
	SetCommMask(dev,0);
	CloseHandle(dev);
    return true;
}

int CFTP628::WriteComm(char * Data,unsigned long lengths)
{    
    int fState;
    DWORD dwFlag;
    _COMSTAT ComStat;
    unsigned long dwErrorFlags;
    //lengths=dwLength;
    //PurgeComm(m_hcom,purge_txclear);//清除发送缓冲区
	if (!m_Connected)
		return -16; //串口连接失败
	if ((dev==NULL) || (dev==OPENFAILE) )
		return -16;//串口连接失败
    ClearCommError(dev,&dwErrorFlags,&ComStat);  //清空缓存
	Sleep(10);     //暂停10毫秒
	PurgeComm(dev,dwFlag);
    fState = WriteFile(dev,Data,lengths,&lengths,&m_osWrite);//(PVOID)
	return 0;
    /*if (not fState)
       if GetLastError=ERROR_IO_PENDING 
          GetOverlappedResult(m_hcom,m_osWrite,lengths,true)//等待
       else
          lengths:=0;*/

}

int CFTP628::PrintOneLine(char * Data)
{
	//打印一行后换行
	 char aCommand[1];	 
	 int i;	 
     aCommand[0]=0x0A;
     i=WriteComm(Data,strlen(Data));
	 if (i!=0) return -1;
	 i=WriteComm(aCommand,1);
	 return i;
}

int CFTP628::CutSheetFull()
{
    //全切纸
	 char aCommand[2];	 
	 int i;	 
     aCommand[0]=0x1B;
     aCommand[1]=0x69;
     i=WriteComm(aCommand,2);
	 return i;
}

int CFTP628::CutSheetHalf()
{
    //半切纸
	 char aCommand[2];	 
	 int i;	 
     aCommand[0]=0x1B;
     aCommand[1]=0x6D;
	 i=WriteComm(aCommand,2);
	 return i;
}

int CFTP628::CutSheetAfterOneLen(int Len)
{
    //向前走纸Len毫米
	 char aCommand[4];	 
	 int i;	 
     aCommand[0]=0x1D;
     aCommand[1]=0x56;
     aCommand[2]=66;
     aCommand[3]=Len*8;
	 i=WriteComm(aCommand,4);
	 return i;     
}

int CFTP628::SetPrintCoordinate(int NL, int NH)
{
    //设置绝对打印位置
	 char aCommand[4];	 
	 int i;	 
     aCommand[0]=0x1B;
     aCommand[1]=0x24;
     aCommand[2]=NL;
     aCommand[3]=NH;
	 i=WriteComm(aCommand,4);
	 return i;   
}

int CFTP628::SetDoubleHeight(int Flag)
{
    //设置倍高倍宽打印
	/*
    
	*/
	 char iFlag[1];
	 switch(Flag)
	 {
		 case 0:
			 iFlag[0] = 0x00; //取消倍宽和倍高
			 break;
		 case 1:
			 iFlag[0] = 0x08; //只设置倍宽
			 break;
		 case 2:
			 iFlag[0] = 0x10; //只设置倍高
			 break;            
		 case 3:
			 iFlag[0] = 0x18; //设置倍宽和倍高      
     }
	 char aCommand[3];	 
	 int i;	 
     aCommand[0]=0x1B;
     aCommand[1]=0x24;
     aCommand[2]=iFlag[0];
	 i=WriteComm(aCommand,3);
	 return i;    
}

int CFTP628::PrinterInit()
{
	//打印机初始化
    /*清除打印缓冲器;
    恢复默认值;
	选择字符打印方式;*/

	 char aCommand[2];	 
	 int i;	 
     aCommand[0]=0x1B;
     aCommand[1]=0x40;
     i=WriteComm(aCommand,2);
	 return i;  
}

int CFTP628::SetAlignStyle(int Flag)
{
     //设置对齐方式
	 /*
       0-->左对齐
	   1-->中心对齐
	   2-->右对齐
	   3-->取消对齐方式
	 */
	 char aCommand[3];	 
	 int i;	 
     aCommand[0]=0x1B;
     aCommand[1]=0x61;
     aCommand[2]=Flag;
	 i=WriteComm(aCommand,3);
	 return i;  
}

int CFTP628::SetLeftBound(int n)
{
  //设置左边界n毫米
	 char aCommand[3];	 
	 int i;	 
     aCommand[0]=0x1D;
     aCommand[1]=0x4C;
     aCommand[2]=n;
	 i=WriteComm(aCommand,3);
	 return i;  
}

int CFTP628::SetBarcodeHeight(int n)
{
   //设置条码高度
	 char aCommand[3];	 
	 int i;	 
     aCommand[0]=0x1D;
     aCommand[1]=0x68;
     aCommand[2]=n;
	 i=WriteComm(aCommand,3);
	 return i;   
}

int CFTP628::SetBarcodeWidth(int n)
{
   //设置条码高度
	 char aCommand[3];	 
	 int i;	 
	 if ((n<2)||(n>6))
		 return -1; //2<=n<=6
     aCommand[0]=0x1D;
     aCommand[1]=0x77;
     aCommand[2]=n;
	 i=WriteComm(aCommand,3);
	 return i;    
}

int CFTP628::PrintBarcode(int m, int n, char *Barcode)
{
	//打印条码
	 char aCommand[4];
	 char * aData;     
	 int i;	 
     aCommand[0]=0x1D;
     aCommand[1]=0x6B;
	 aCommand[2]=m;
	 aCommand[3]=n;
     aData=aCommand;
	 strcpy(aData,Barcode);
     i=WriteComm(aData,strlen(aData));
	 if (i!=0) return -1;
	 i=WriteComm(aCommand,1);
	 return i;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -