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