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