Code Snippet - 实现非模态对话框显示程序运行日志

软件项目发展到一定规模时,为程序加入运行日志是很好的测试和监控手段。最近尝试在一个历史比较悠久的MFC程序中加入此功能,记录下主要步骤。

因为程序的主界面已经比较复杂,因此创建独立的非模态对话框,并用ListBox控件来显示日志,在需要时显示日志窗口,不需要时则隐藏。

新建基于MFC Dialog的示例工程LogDemo,添加用于显示Log的对话框窗口IDD_DIALOG_LOG,为其添加类CLogDlg,在CLogDemoDlg.h中声明CLogDlg类指针

CLogDlg * pLogDlg;

动态创建CLogDialog类实例

pLogDlg = new pLogDlg();
pLogDlg->Create(IDD_DIALOG_LOG, this);
pLogDlg->CenterWindow();

自定义全局消息

#define WM_MSG_LOG WM_USER+1

在CLogDlg.h中声明消息处理函数

afx_msg LRESULT LogProc(WPARAM wParam, LPARAM lParam);

在CLogDlg.cpp的MESSAGE_MAP中增加消息映射

ON_MESSAGE(WM_MSG_LOG, LogProc);

将程序Log发送至日志窗口

void CLogDemoDlg::OnPrintLog()
{
    CString *pLog = new CString("program running");
    ::PostMessage(pLogDlg->m_hWnd, WM_MSG_LOG, 0, (LPARAM)pLog);
}

CLogDlg.cpp实现消息处理函数,pListLog为指向ListBox控件的指针

LRESULT CLogDlg::LogProc(WPARAM wParam, LPARAM lParam)
{
    CString * pStr = (CString *)lParam;
    pListLog->AddString(pStr);
    delete pStr;
    
    return 0L;
}

添加新评论