AfxMessageBox日志编写方法



#define   MB_USERDEFINE   0x10000000 

AfxMessageBox 的第二个参数 nType 是指定 MessageBox 的类型,在 Winuser.h 中定义了一些标准的类型,

请注意 nType 是 UINT 类型的,而标准类型的定义才不到10个,你完全可以添加自己的 MessageBox 类型!

在 CMyApp.h 中定义:

#define MB_USERDEFINE 0x10000000 



在CMyApp中定义成员变量

FILE *m_LogFile;

在CMyApp中重载虚函数 DoMessageBox

int CMyApp::DoMessageBox(LPCTSTR lpszPrompt, UINT nType, UINT nIDPrompt)
{
// TODO: Add your specialized code here and/or call the base class
if   (MB_USERDEFINE   ==   nType) 

if(_tcslen(lpszPrompt) == 0) 
//_tcslen(lpszPrompt)函数,求Unicode字符串(此处为lpszPrompt)的长度,
//使用跟非Unicode的strlen一样
return TRUE;
CString csMsgString = lpszPrompt;   //赋值;


if(csMsgString[csMsgString.GetLength()-1] != _T('\n'))//最后一个不是换行;
csMsgString += _T("\r\n");  //添加换行回车  _T是得到UNICODE字符串;
else
{
csMsgString.Insert(csMsgString.GetLength()-1,_T('\r'));
//c.insert(B,L,R)即在B位置,插入[L,R)之间的数。('\n'前面加上'\r');
}
if(m_LogFile == NULL)//打开文件
{
_wfopen_s(&m_LogFile,GetCurrentPath()+_T("log.txt"),_T("a+"));
}

char *MsgBuff;
if(m_LogFile != NULL)
{
CTime t = CTime::GetCurrentTime();


//MultiByteToWideChar(CP_ACP,0,MsgBuff,strlen(MsgBuff),csMsgString.GetBuffer(MAX_PATH),MAX_PATH);
//CWideToAnsi::convert(MsgBuff,csMsgString);
MsgBuff=THCAR2char(csMsgString.GetBuffer(MAX_PATH));
fprintf(m_LogFile,"%4d-%02d-%02d %02d:%02d:%02d %s",
t.GetYear(), t.GetMonth(), t.GetDay(),
t.GetHour(), t.GetMinute(), t.GetSecond(), MsgBuff);
fflush(m_LogFile);
//输出时间信息,输出到文件log.txt中
}


//CWideToAnsi::convert(MsgBuff,lpszPrompt);//转换
return   TRUE; 

else
return CWinApp::DoMessageBox(lpszPrompt, nType, nIDPrompt);
}

在构造函数中初始化 m_LogFile = NULL;

在InitInstance中关闭m_LogFile

BOOL CMyApp::InitInstance()
{
CWinApp::InitInstance();
if(m_LogFile)                   //CRecordServer::FILE *m_LogFile定义的量
fclose(m_LogFile);//fclose关闭一个流,
//把缓冲区内最后剩余的数据输出到磁盘文件中,
//并释放文件指针和有关的缓冲区
return TRUE;
}


CString GetCurrentPath()
{
TCHAR TExeFullPath[MAX_PATH];
CString csCurrentPath;
GetModuleFileName(NULL,TExeFullPath,MAX_PATH);//获取一个已装载模板的完整路径名称
csCurrentPath = TExeFullPath;
int pos = csCurrentPath.ReverseFind(_T('\\'));//pos等于从右往左找到的“\\”的位置
return csCurrentPath.Mid(0,pos+1);//从字符串中返回指定数目的字符
}

使用AfxMessageBox(_T("程序运行"),MB_USERDEFINE);

这样就可以在程序中打印日志了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值