📄 printdirectctl.cpp
字号:
HANDLE hHandle = NULL ;
hHandle = (HANDLE) PrintHandle;
CommandControlCode[0] = 0x1B;
CommandControlCode[1] = 0x39;
CommandControlCode[2] = 0x11;
CommandControlCode[3] = 0x07;
CommandControlCode[4] = 0x00;
strcpy( Command, CommandControlCode) ;
OVERLAPPED stOverLappedWrite ;
ZeroMemory( &stOverLappedWrite, sizeof(OVERLAPPED));
stOverLappedWrite.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL );
COMMTIMEOUTS m_CommTimeouts ;
m_CommTimeouts.ReadIntervalTimeout = 0xFFFFFFFF; //读操作两个字节之间
m_CommTimeouts.ReadTotalTimeoutMultiplier = 0; //读操作的时间(单位:毫秒)
m_CommTimeouts.ReadTotalTimeoutConstant = 0;
m_CommTimeouts.WriteTotalTimeoutMultiplier = 0;
m_CommTimeouts.WriteTotalTimeoutConstant = 3000;
SetCommTimeouts( hHandle, &m_CommTimeouts );
nRet = WriteFile( hHandle, Command, strlen( Command), &dwRead, &stOverLappedWrite ) ;
if ( nRet == 0 )
{
DWORD dwTransferredData ;
dwRet = GetOverlappedResult( hHandle, &stOverLappedWrite, &dwTransferredData, TRUE) ;
if ( dwRet == 0 )
{
dwError = GetLastError();
switch (dwError)
{
case 21:
dwRet = -21;
break;
case 28:
dwRet = -23;
break;
case 1167:
dwRet = -22;
break;
default:
dwRet = -1;
break;
}
}
}
delete Command ;
return dwRet ;
}
/***************************************************************************/
// //
// 打印机前走纸 //
// //
// 参数值:int 4 个字节长度 (打印设备资源句柄) // //
// //
// 返回值:int 4 个字节长度 (打印信息返回码) // //
// //
// = 0 --- 错误 ; //
// > 0 --- 正确 //
// //
/***************************************************************************/
long CPrintDirectCtrl::PaperFore(long PrintHandle, short ForeLength)
{
// TODO: Add your dispatch handler code here
int nRet = -1 ;
HANDLE hHandle = NULL ;
hHandle = (HANDLE) PrintHandle;
if ( PrintHandle <= 0 ) // 非法的设备句柄
return -11 ;
DWORD t1,dwRead;
COMSTAT t2;
char *Command = new char[10] ;
char CommandControlCode[10];
//* 打印机前走纸 (一次设置 127 个 1/180 英寸单位)
CommandControlCode[0] = 0x1B;
CommandControlCode[1] = 0x4A;
CommandControlCode[2] = (char)ForeLength ;//0xF0; // n / 180 英寸
CommandControlCode[3] = 0x00;
/* CommandControlCode[0] = 0x1B;
CommandControlCode[1] = 0x4A;
CommandControlCode[2] = 0x8F;
CommandControlCode[3] = 0x00;
*/
strcpy( Command, CommandControlCode) ;
CommandControlCode[0] = 0x0a;
CommandControlCode[1] = 0x0d;
CommandControlCode[2] = 0x00;
strcat( Command, CommandControlCode) ;
OVERLAPPED stOverLapped ;
memset( &stOverLapped, 0, sizeof(OVERLAPPED));
nRet = WriteFile( hHandle, Command, strlen( Command), &dwRead, &stOverLapped ) ;
if ( nRet == 0 )
{
GetLastError();
}
if( !ClearCommError( hHandle, &t1, &t2) )
{
switch(t1) // return false
{
case CE_OOP:
// TRACE("G CE_OOP\n");
nRet = -1 ;
break;
case CE_PTO://超时错误
//TRACE("G CE_PTO\n");
nRet = -2 ;
break;
case CE_IOE:
//TRACE("G CE_IOE\n");
nRet = -3 ;
break;
}
}
delete Command ;
return nRet;
}
/***************************************************************************/
// //
// 打印机后走纸 //
// //
// 参数值:int 4 个字节长度 (打印设备资源句柄) // //
// //
// 返回值:int 4 个字节长度 (打印信息返回码) //
// //
// = 0 --- 错误 ; //
// > 0 --- 正确 // //
// //
/***************************************************************************/
long CPrintDirectCtrl::PaperBack(long PrintHandle, short BackLength)
{
// TODO: Add your dispatch handler code here
int nRet = -1 ;
HANDLE hHandle = NULL ;
hHandle = (HANDLE) PrintHandle;
if ( PrintHandle <= 0 ) // 非法的设备句柄
return -11 ;
DWORD t1,dwRead;
COMSTAT t2;
char *Command = new char[10] ;
char CommandControlCode[10];
//* 打印机后走纸 (一次设置 127 个 1/180 英寸单位)(第一次)
CommandControlCode[0] = 0x1B;
CommandControlCode[1] = 0x6A;
CommandControlCode[2] = (char)BackLength; //0xF0;
CommandControlCode[3] = 0x00; // n / 180 英寸
strcpy( Command, CommandControlCode) ;
//
CommandControlCode[0] = 0x0a;
CommandControlCode[1] = 0x0d;
CommandControlCode[2] = 0x00;
strcat( Command, CommandControlCode) ;
//
OVERLAPPED stOverLapped ;
memset( &stOverLapped, 0, sizeof(OVERLAPPED));
nRet = WriteFile( hHandle, Command, strlen( Command), &dwRead, &stOverLapped ) ;
if ( nRet == 0 )
{
GetLastError();
}
if( !ClearCommError( hHandle, &t1, &t2) )
{
switch(t1) // return false
{
case CE_OOP:
// TRACE("G CE_OOP\n");
nRet = -1 ;
break;
case CE_PTO://超时错误
//TRACE("G CE_PTO\n");
nRet = -2 ;
break;
case CE_IOE:
//TRACE("G CE_IOE\n");
nRet = -3 ;
break;
}
}
delete Command ;
return nRet;
}
/***************************************************************************/
// //
// 打印 "养路费征收情况分析表" B/S //
// //
// 参数值:int 4 个字节长度 (打印设备资源句柄) PrintHandle //
// //
// 字符串, 打印数据。列分割符号 "@",行分隔符 "*" PrintData //
// //
// 返回值:int 4 个字节长度 (打印信息返回码) //
// //
// = 0 --- 错误 ; //
// > 0 --- 正确 //
// //
/***************************************************************************/
long CPrintDirectCtrl::PrintYLFZSQKFXB(long PrintHandle, LPCTSTR PrintData)
{
// TODO: Add your dispatch handler code here
// ─ ━│┃┄ ┅┆┇┈ ┉┊┋┛┚┙┘┗┖┕└ ┓┒┑┐
//
//┏┎┍┌├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱
//
// ┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋
// 对象全局变量
// char *szPrintData[50][50] ;
// int Lines ;
// int Cols[50];
/* int nRet = -1 ;
//int Lines = 0 ;
int i = 0 , j = 0 ;
// 行数据
char LineData[1024];
HANDLE hHandle = NULL ;
hHandle = (HANDLE) PrintHandle;
if ( PrintHandle <= 0 ) // 非法的设备句柄
return -11 ;
DWORD t1,dwRead;
DWORD dwError ;
COMSTAT t2;
// 结构和数组赋值
nRet = CPrintDirectCtrl::SetStructData( PrintData, 1) ;
if ( nRet < 0 )
return nRet ;
//**********************************************************************
// 开始打印数据
// char *szPrintData[50][50] ;
// int Lines ;
// int Cols[50];
// 标题 "养路费征收情况分析表"
strcpy( LineData, CPrintDirectCtrl::szSpaceData(20) ) ;
strcat( LineData, "养 路 费 征 收 情 况 分 析 表 ") ;
CPrintDirectCtrl::PrintOneLine( PrintHandle, LineData, 30, 0) ;
// 填报单位
if ( Cols[0] < 2 )
return -21;
strcpy( LineData, "填报单位: ") ;
strcat( LineData, szPrintData[0][0]) ;
strcat( LineData, CPrintDirectCtrl::szSpaceData(80 - strlen(szPrintData[0][0]) ) ) ;
strcat( LineData, szPrintData[0][1]) ;
strcat( LineData, CPrintDirectCtrl::szSpaceData(20 ) ) ;
strcat( LineData, "征收 01 表") ;
CPrintDirectCtrl::PrintOneLine( PrintHandle, LineData, 26, 1) ;
// ─ ━│┃┄ ┅┆┇┈ ┉┊┋┛┚┙┘┗┖┕└ ┓┒┑┐┏┎┍┌├┝┞┟┠┡┢
//
//┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋
// 表一(表头)
// 画表格顶线
strcpy( LineData, "┏━━━━━━━┳━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━┓") ;
CPrintDirectCtrl::PrintOneLine( PrintHandle, LineData, 26, 1) ;
strcpy( LineData, "┃ ┃ ┃ 实征率 ┃ 漏征率 ┃ 减免率 ┃ 统缴率 ┃ 免征率 ┃ 报停率 ┃") ;
CPrintDirectCtrl::PrintOneLine( PrintHandle, LineData, 26, 1) ;
strcpy( LineData, "┃ 项目 ┃ 应征 ┣━━━━━┳━━━━━╋━━━━━┳━━━━━╋━━━━━┳━━━━━╋━━━━━┳━━━━━╋━━━━━┳━━━━━╋━━━━━┳━━━━━┫") ;
CPrintDirectCtrl::PrintOneLine( PrintHandle, LineData, 26, 1) ;
strcpy( LineData, "┃ ┃ ┃ 实征 ┃ 实征率% ┃ 漏征 ┃ 漏征率% ┃ 减免 ┃ 减免率% ┃ 统缴 ┃ % ┃ 免费 ┃ % ┃ 报停 ┃ % ┃") ;
CPrintDirectCtrl::PrintOneLine( PrintHandle, LineData, 26, 1) ;
strcpy( LineData, "┣━━━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━┫") ;
CPrintDirectCtrl::PrintOneLine( PrintHandle, LineData, 26, 1) ;
// 以费额计算 ,以车辆计算, 以吨位计算
strcpy( LineData, "┃ 以费额计算 ┃") ;
for ( i =0 ; i < Cols[1] ; i ++ )
{
strcat( LineData, CPrintDirectCtrl::szSpaceData(10 - strlen(szPrintData[1][i]) )) ;
strcat( LineData, szPrintData[1][i]) ;
strcat( LineData, "┃") ;
}
CPrintDirectCtrl::PrintOneLine( PrintHandle, LineData, 26, 1) ;
strcpy( LineData, "┣━━━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━┫") ;
CPrintDirectCtrl::PrintOneLine( PrintHandle, LineData, 26, 1) ;
strcpy( LineData, "┃ 以车辆计算 ┃") ;
for ( i =0 ; i < Cols[2] ; i ++ )
{
strcat( LineData, CPrintDirectCtrl::szSpaceData(10 - strlen(szPrintData[2][i]) )) ;
strcat( LineData, szPrintData[2][i]) ;
strcat( LineData, "┃") ;
}
CPrintDirectCtrl::PrintOneLine( PrintHandle, LineData, 26, 1) ;
strcpy( LineData, "┣━━━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━┫") ;
CPrintDirectCtrl::PrintOneLine( PrintHandle, LineData, 26, 1) ;
strcpy( LineData, "┃ 以吨位计算 ┃") ;
for ( i =0 ; i < Cols[3] ; i ++ )
{
strcat( LineData, CPrintDirectCtrl::szSpaceData(10 - strlen(szPrintData[3][i]) )) ;
strcat( LineData, szPrintData[3][i]) ;
strcat( LineData, "┃") ;
}
CPrintDirectCtrl::PrintOneLine( PrintHandle, LineData, 26, 1) ;
strcpy( LineData, "┣━━━━━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━┫") ;
CPrintDirectCtrl::PrintOneLine( PrintHandle, LineData, 26, 1) ;
// 表二(表头)
strcpy( LineData, "┣━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫") ;
CPrintDirectCtrl::PrintOneLine( PrintHandle, LineData, 20, 1) ;
strcpy( LineData, "┃ ┃ 车辆吨位 ┃ 报停吨位 ┃ 养路费收入 ┃") ;
CPrintDirectCtrl::PrintOneLine( PrintHandle, LineData, 26, 1) ;
strcpy( LineData, "┃ 月份 ┣━━━━━┳━━━━━┳━━━━━╋━━━━━┳━━━━━┳━━━━━╋━━━━━┳━━━━━━━━━━━┳━━━━━┳━━━━━━━━━━━┳━━━━━┫") ;
CPrintDirectCtrl::PrintOneLine( PrintHandle, LineData, 26, 1) ;
strcpy( LineData, "┃ ┃ 本月 ┃ 上年同期 ┃ 增减% ┃ 本月 ┃ 上年同期 ┃ 增减% ┃ 年度计划 ┃ 本年累计 ┃ 完成% ┃ 上年同期 ┃ 增减% ┃") ;
CPrintDirectCtrl::PrintOneLine( PrintHandle, LineData, 26, 1) ;
strcpy( LineData, "┣━━━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━━━━━━━╋━━━━━╋━━━━━━━━━━━╋━━━━━┫") ;
CPrintDirectCtrl::PrintOneLine( PrintHandle, LineData, 26, 1) ;
// 打印数据 5 <----> Lines - 2
for ( i = 4 ; i < Lines - 3 ; i ++ ) // 行
{
strcpy( LineData, "┃") ;
strcat( LineData, CPrintDirectCtrl::szSpaceData(14 - strlen(szPrintData[i][0]) )) ;
strcat( LineData, szPrintData[i][0]) ;
strcat( LineData, "┃") ;
for ( j =1 ; j < Cols[i] ; j ++ )
{
if ( j == 8 || j == 10 )
{
strcat( LineData, CPrintDirectCtrl::szSpaceData(22 - strlen(szPrintData[i][j]) )) ;
}
else
{
strcat( LineData, CPrintDirectCtrl::szSpaceData(10 - strlen(szPrintData[i][j]) )) ;
}
strcat( LineData, szPrintData[i][j]) ;
strcat( LineData, "┃") ;
}
CPrintDirectCtrl::PrintOneLine( PrintHandle, LineData, 26, 1) ;
strcpy( LineData, "┣━━━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━━━━━━━╋━━━━━╋━━━━━━━━━━━╋━━━━━┫") ;
CPrintDirectCtrl::PrintOneLine( PrintHandle, LineData, 26, 1) ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -