1. 项目背景与核心需求
在Windows桌面应用开发中,MFC(Microsoft Foundation Classes)框架至今仍是许多遗留系统和工业控制软件的主流选择。调试信息的实时显示对于这类需要长时间运行的应用程序尤为重要。传统方案通常采用以下几种方式:
- 使用OutputDebugString输出到调试器
- 通过PostMessage跨线程发送日志消息
- 直接写入文件日志
这些方法各自存在明显局限:调试器输出无法在release版本中查看;PostMessage需要处理复杂的消息映射;文件日志则缺乏实时性。本项目提出的解决方案实现了:
- 任意代码位置直接调用
- 实时显示到界面Edit控件
- 多界面共享日志输出
- 线程安全的底层实现
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术方案设计
2.1 核心架构设计
采用单例模式+观察者模式的混合架构:
cpp复制class LogDispatcher {
private:
static LogDispatcher* instance;
std::vector<CEdit*> observers;
CCriticalSection lock;
public:
static LogDispatcher* GetInstance();
void RegisterEdit(CEdit* edit);
void UnregisterEdit(CEdit* edit);
void DispatchLog(LPCTSTR message);
};
关键设计要点:
- 单例模式确保全局唯一访问点
- 观察者列表维护所有注册的Edit控件
- 临界区(CCriticalSection)保证线程安全
2.2 日志输出接口设计
提供三种常用接口形式:
cpp复制// 基础版
void Log(LPCTSTR format, ...);
// 带前缀版
void LogWithPrefix(LPCTSTR prefix, LPCTSTR format, ...);
// 带颜色版
void LogWithColor(COLORREF color, LPCTSTR format, ...);
参数设计考虑
