📄 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 + -