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

📄 printdirectctl.cpp

📁 直接控制端口打印的MFC控件程序
💻 CPP
📖 第 1 页 / 共 5 页
字号:

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