|
发表于 2024-3-19 10:33:05
|
显示全部楼层
江苏省连云港市
感谢分享 这么老的帖子没想到还有人关注 自用的已把线程换成了定时器也加入了写文件 表现似乎更好的同时代码也更轻量 以下是参考 只有一个类 原理不变 缺失的常规函数还请自行补全
窗口程序集名 | 保 留 | 保 留 | 备 注 | 超级日志框, , 公开 | | | | 变量名 | 类 型 | 数组 | 备 注 | m_IOCP | 整数型 | | m_OnTimerProc | 整数型 | | m_Window | 整数型 | | m_Edit | 超级编辑框 | | m_Font | 字符格式 | | m_MaxLine | 整数型 | | m_EditLine | 整数型 | | m_FileLine | 整数型 | | m_Dir | 文本型 | | m_Name | 文本型 | | m_File | 整数型 | | m_Level | 整数型 | |
m_OnTimerProc = 类回调取地址 (2, 4, , )m_IOCP = CreateIoCompletionPort (-1, 0, 0, 0 ) 解除 ()类回调释放 (m_OnTimerProc )如果真 (m_File > 0 )关闭文件 (m_File )CloseHandle (m_IOCP)|
__WindowProc | 整数型 | | |
hWnd | 整数型 | | | | msg | 整数型 | | | | wParam | 整数型 | | | | lParam | 整数型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | oldproc | 整数型 | | | 时间 | 整数型 | | | 级别 | 整数型 | | | 指针 | 整数型 | | | 内容 | 文本型 | | 3 | 颜色 | 整数型 | | 3 | i | 整数型 | | |
oldproc = GetPropA (hWnd, “__WindowProc_Timer”)判断 (msg = #WM_TIMER )如果真 (GetQueuedCompletionStatus (m_IOCP, 时间, 级别, 指针, 0 )) 颜色 [1 ] = MemGetInt (指针, 0 )颜色 [2 ] = 多项选择 (级别, #墨绿, #橙黄, #红色 )颜色 [3 ] = MemGetInt (指针, 4 )内容 [1 ] = “[” + TimeFormat (增减时间 (到时间 (“1970-01-01 08:00:00”), #秒, 时间 ), , ) + “] ”内容 [2 ] = 多项选择 (级别, “[信息] ”, “[警告] ”, “[错误] ”)内容 [3 ] = MemGetText (指针, 8, ) + #换行符 MemFree (指针 ) 如果真 (m_Dir ≠ “” 且 级别 ≥ m_Level )如果真 (m_File = 0 )m_File = 打开文件 (m_Dir + m_Name + “_” + TimeFormat (, “yyyyMMdd”, “_HHmmss”) + “.log”, #重写, #无限制 )移到文件尾 (m_File )如果真 (m_File > 0 )写出文本 (m_File, 内容 [1 ] + 内容 [2 ] + 内容 [3 ])m_FileLine = m_FileLine + 1 如果真 (m_FileLine ≥ m_MaxLine )关闭文件 (m_File )m_File = 0 m_FileLine = 0 m_EditLine = m_EditLine + 1 如果真 (m_EditLine ≥ m_MaxLine )m_Edit.内容 = “”m_EditLine = 0 计次循环首 (3, i )m_Edit.起始选择位置 = 取文本长度 (m_Edit.内容 )m_Font.文本颜色 = 颜色 [i ]m_Edit. 置选择区字符格式 (m_Font )m_Edit.被选择文本 = 内容 [i ]计次循环尾 ()返回 (0 )返回 (CallWindowProc (oldproc, hWnd, msg, wParam, lParam))|
注册 | 逻辑型 | | |
编辑框 | 超级编辑框 | | | | 字体 | 文本型 | | | | 字号 | 整数型 | | | | 最大行数 | 整数型 | | | | 保存目录 | 文本型 | | | | 文件名称 | 文本型 | | | | 记录级别 | 整数型 | | | |
m_MaxLine = 选择 (最大行数 ≤ 0, 5200, 最大行数 )m_Font.文本颜色 = #黑色 m_Font.字体名称 = 选择 (字体 = “”, “微软雅黑”, 字体 )m_Font.字体大小 = 选择 (字号 ≤ 0, 9, 字号 )m_Level = 选择 (记录级别 ≥ 1 且 记录级别 ≤ 3, 记录级别, 1 )m_Name = 选择 (文件名称 = “”, “日志”, 文件名称 )m_Dir = 保存目录 如果真 (m_Dir ≠ “”)如果真 (DirExist (m_Dir ) = 假)DirCreate (m_Dir )如果真 (是否已创建 (编辑框 )) m_Edit = 编辑框 m_Edit.自动换行 = 假 m_Edit.只读 = 真 m_Edit.隐藏选择 = 假 m_Window = m_Edit. 取窗口句柄 ()oldproc = GetPropA (m_Window, “__WindowProc_Timer”)如果真 (oldproc = 0 )oldproc = SetWindowLongA (m_Window, #GWL_WNDPROC, m_OnTimerProc )SetPropA (m_Window, “__WindowProc_Timer”, oldproc )返回 (SetTimer (m_Window, m_Window, 10, 0 ) ≠ 0 )返回 (假)变量名 | 类 型 | 静态 | 数组 | 备 注 | hWnd | 整数型 | | | oldproc | 整数型 | | | KillTimer (m_Window, m_Window )oldproc = GetPropA (m_Window, “__WindowProc_Timer”)如果真 (oldproc ≠ 0 )SetWindowLongA (m_Window, #GWL_WNDPROC, oldproc )RemovePropA (m_Window, “__WindowProc_Timer”)|
加入日志 | 逻辑型 | | |
日志内容 | 文本型 | | | | 日志级别 | 整数型 | | | | 日志颜色 | 整数型 | | | | 时间颜色 | 整数型 | | | |
日志级别 = 选择 (日志级别 ≥ 1 且 日志级别 ≤ 3, 日志级别, 1 )如果真 (日志内容 = “”)返回 (假)时间 = 取时间间隔 (取现行时间 (), 到时间 (“1970-01-01 08:00:00”), #秒 )指针 = MemAlloc (取文本长度 (日志内容 ) + 1 + 8 )如果真 (指针 ≤ 0 )返回 (假)MemSetInt (指针, 0, 选择 (是否为空 (时间颜色), #天蓝, 时间颜色))MemSetInt (指针, 4, 日志颜色 )MemSetText (指针, 8, 日志内容, )返回 (PostQueuedCompletionStatus (m_IOCP, 时间, 日志级别, 指针 )) 如果真 (是否已创建 (m_Edit )) m_Edit.内容 = “”处理事件 ()变量名 | 类 型 | 静态 | 数组 | 备 注 | 行数组 | 文本型 | | 0 | i | 整数型 | | | 可视行 | 整数型 | | | 如果真 (是否已创建 (m_Edit )) 可视行 = m_Edit. 取首可视行 ()行数组 = 分割文本 (m_Edit.内容, #换行符, )计次循环首 (取数组成员数 (行数组 ), i )如果真 (寻找文本 (行数组 [i ], 文本, , 假) ≠ -1 )m_Edit. 滚动 (i - 可视行 - 1 )跳出循环 ()计次循环尾 ()处理事件 ()
|
评分
-
查看全部评分
|