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

📄 consoletxtwnd.cpp

📁 网络转发器 用于运行在可以跨两个网段的机器上用来作为一个TCP应用层的一个桥
💻 CPP
字号:
#include "stdafx.h"
#include "consoleTxtWnd.h"
// ver 0.1 by wenyy 2001/03/01
///
///
///

//空行
char temp_blink_line[200]="^^^^                                                                                                                                                                                        ";
CConsoleTxtWnd::CConsoleTxtWnd(HANDLE hOutput,int iX,int iY,int iWidth,int iHeight,LPCSTR pszWndName)
{
	m_hMutex = CreateMutex(NULL,FALSE,pszWndName);
	if(m_hMutex == NULL)
		throw("error cretae mutext of text wnd");
	m_iStartX=iX;
	m_iStartY=iY;
	if(hOutput)
		m_hOutput= hOutput;
	else
		m_hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
	ASSERT(m_hOutput);
	m_iWidth = iWidth;
	m_iHeight = iHeight;
	m_iSeq =0;
}

CConsoleTxtWnd::CConsoleTxtWnd(int iX,int iY,int iXEnd,int iYEnd,HANDLE hOutput,LPCSTR pszWndName)
{
	m_hMutex = CreateMutex(NULL,FALSE,pszWndName);
	if(m_hMutex == NULL)
		throw("error cretae mutext of text wnd");
	m_iStartX=iX;
	m_iStartY=iY;
	if(hOutput)
		m_hOutput= hOutput;
	else
		m_hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
	ASSERT(m_hOutput);
	m_iWidth = iXEnd - iX + 1;
	m_iHeight = iYEnd - iY + 1;
	m_iSeq =0;
}

CConsoleTxtWnd::~CConsoleTxtWnd()
{
	CloseHandle(m_hMutex);
}

void CConsoleTxtWnd::PrintXY(int iX,int iY,LPCSTR pszTxt,int iLen)
{
	COORD cdPos={iX,iY};
	DWORD dwWrite=0;
	WriteConsoleOutputCharacter(GetStdHandle(STD_OUTPUT_HANDLE),pszTxt,iLen,cdPos,&dwWrite);
}

void CConsoleTxtWnd::printf(const char* txt,...)
{
	//prepare string
	char szTemp[4096];
//	char szSpace[TXT_WND_WIDTH];
//	memset(szSpace,0x20,sizeof(szSpace));

	va_list marker;
	va_start(marker, txt );     
	int ret=vsprintf(szTemp,txt,marker);
	//begin to write
	int iLen = strlen(szTemp);
	int iLines = iLen / m_iWidth;
	iLines += (iLen % m_iWidth)?1:0;
	WaitForSingleObject(m_hMutex,INFINITE);
	for(int i=0;i<iLines;i++)
	{
		DWORD dwWrite=0;
		int iYPos = m_iSeq%m_iHeight;
		m_iSeq++;
		COORD cdPos={m_iStartX,m_iStartY+iYPos};
		int iWriteLen = ((i+1)*m_iWidth > iLen)?(iLen-i*m_iWidth):m_iWidth;
		WriteConsoleOutputCharacter(m_hOutput,temp_blink_line,m_iWidth,cdPos,&dwWrite);
		WriteConsoleOutputCharacter(m_hOutput,szTemp + i*m_iWidth,iWriteLen,cdPos,&dwWrite);
		{//在下行添加空行
			iYPos = m_iSeq%m_iHeight;
			cdPos.Y =m_iStartY+iYPos;
			WriteConsoleOutputCharacter(m_hOutput,temp_blink_line,m_iWidth,cdPos,&dwWrite);
		}
	}
	ReleaseMutex(m_hMutex);
}

///
///
///

CConsoleTxtWnd2File::CConsoleTxtWnd2File(HANDLE hOutput,int iX,int iY,int iWidth,int iHeight,LPCSTR pszWndName,LPCSTR pszDir,LPCSTR pszFile)
:CConsoleTxtWnd(hOutput,iX,iY,iWidth,iHeight,pszWndName)
{
	strcpy(m_szDir,pszDir);
	strcpy(m_szProFile,pszFile);
	MakeFileName();
}

CConsoleTxtWnd2File::CConsoleTxtWnd2File(int iX,int iY,int iXEnd,int iYEnd,HANDLE hOutput,LPCSTR pszWndName,LPCSTR pszDir,LPCSTR pszFile)
:CConsoleTxtWnd(iX,iY,iXEnd,iYEnd,hOutput,pszWndName)
{
	strcpy(m_szDir,pszDir);
	strcpy(m_szProFile,pszFile);
	MakeFileName();
}

CConsoleTxtWnd2File::~CConsoleTxtWnd2File()
{
}

void CConsoleTxtWnd2File::printf(const char* txt,...)
{
	//prepare string
	char szTemp[4096];
	//char szSpace[TXT_WND_WIDTH];
	//memset(szSpace,0x20,sizeof(szSpace));

	va_list marker;
	va_start(marker, txt );     
	int ret=vsprintf(szTemp,txt,marker);
	//begin to write
	int iLen = strlen(szTemp);
	int iLines = iLen / m_iWidth;
	iLines += (iLen % m_iWidth)?1:0;
	WaitForSingleObject(m_hMutex,INFINITE);
	//确定文件名,文件根据日期不同而不同
	for(int i=0;i<iLines;i++)
	{
		DWORD dwWrite=0;
		int iYPos = m_iSeq%m_iHeight;
		m_iSeq++;
		COORD cdPos={m_iStartX,m_iStartY+iYPos};
		int iWriteLen = ((i+1)*m_iWidth > iLen)?(iLen-i*m_iWidth):m_iWidth;
		WriteConsoleOutputCharacter(m_hOutput,temp_blink_line,m_iWidth,cdPos,&dwWrite);
		WriteConsoleOutputCharacter(m_hOutput,szTemp + i*m_iWidth,iWriteLen,cdPos,&dwWrite);
		{//在下行添加空行
			iYPos = m_iSeq%m_iHeight;
			cdPos.Y =m_iStartY+iYPos;
			WriteConsoleOutputCharacter(m_hOutput,temp_blink_line,m_iWidth,cdPos,&dwWrite);
		}
	}
	//打开文件
	MakeFileName();
	FILE *pF=fopen(m_szFileName,"a");
	if(pF)
	{
		CTime tmNow=CTime::GetCurrentTime();
		fprintf(pF,"[%04d/%02d/%02d %02d:%02d:%02d] %s\n",
					tmNow.GetYear(),tmNow.GetMonth(),tmNow.GetDay(),
					tmNow.GetHour(),tmNow.GetMinute(),tmNow.GetSecond(),
					szTemp);
		fclose(pF);
	}
	ReleaseMutex(m_hMutex);
}

void CConsoleTxtWnd2File::MakeFileName(void)
{
	CTime tmNow=CTime::GetCurrentTime();
	sprintf(m_szFileName,"%s\\%s_%04d_%02d_%02d.txt",m_szDir,m_szProFile,tmNow.GetYear(),tmNow.GetMonth(),tmNow.GetDay());
}

⌨️ 快捷键说明

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