当前位置: 首页 > news >正文

C++自绘DateTime:分段自定义色彩加eee毫秒格式支持

开篇:所有 C++ 桌面开发都会踩的 DateTime 大坑

做上位机、日志监控、时序记录、工业测控、数据溯源类软件的 C++ 开发者,没人能避开系统原生 DateTime 控件的折磨。 看似基础的日期选择、展示控件,实则藏着两大无法绕过的硬伤,无数项目为了适配需求,只能手写复杂自绘逻辑,徒增几十上百行冗余代码,还容易出现渲染闪烁、格式兼容 bug。

吐槽原生 DateTime 两大核心痛点

  1. 全局单色文字,无法区分年、月、日、时、分、秒视觉层级原生 DateTime 所有时间文本统一同一种颜色,yyyy 年、MM 月、dd 日、HH 时、mm 分、ss 秒全部混为一体。
  • 日志界面:无法高亮年份、标红异常秒数,排查时序数据费眼低效;
  • 工业监控界面:关键毫秒、时间节点无法突出,界面毫无层次感;
  • UI 标准化需求:产品设计要求年月区分色彩,原生控件完全不支持,只能弃用重写;
  • 二次开发成本:想要分段上色,需要拆解日期字符串、逐段绘制文本、处理坐标对齐,极易出现文字错位、渲染卡顿。
  1. 原生控件无毫秒支持,高精度时序场景直接作废系统自带 DateTime 仅支持到秒级格式,没有任何内置毫秒标识,对于高精度场景是致命短板:
  • 设备采集、传感器日志、高速数据流需要精确到千分之一秒记录;
  • 时序对比、故障溯源、延时测试缺少毫秒维度,数据精度不足;
  • 开发者只能拼接文本框 + 隐藏控件组合实现,多控件联动极易出现同步误差、输入格式校验漏洞;
  • 组合控件代码耦合严重,后期维护、移植项目成本极高。

这是默认的DateTime控件

开发目标:解决分段上色和毫秒级显示

这是自绘后的DateTime控件

上图我们可以看出旧控件和新控件的明显差距。现在我们就来讲实现过程。

开发环境:VS2019

界面库:酷宝-001-选驱者 下载地址:库来帮 www.kulb.cn

接入方法我前面有讲这里就不再重述。

首先是DateTime的指令

关于时间日期命令转换的解释;
yyyy 4年份 如:2058;
yyy 4年份 如:2058;
yy 2年份 如:58;
y 2年份 如:58;
MMMM 完整月 如:十二月;
MMM 缩写月 如:2月;
MM 满位月 01-12 如:02;
M 占位月 1-12 如:2;
dddd 完整星期几 如:星期六;
ddd 缩写周几 如:周六;
dd 满位日 01-31 如:09;
d 占位日 1-31 如:9;
HH (24小时制) 满位时 00-23 如:09;
H (24小时制) 占位时 0-23 如:9;
hh (12上时制) 满位时 01-12 如:09;
h (12小时制) 占位时 1-12 如:9;
mm 满位分 00-59 如:09;
m 占位分 0-59 如:9;
ss 满位秒 00-59 如:09;
s 占位秒 0-59 如:9;
tt AM/PM完整 上下午 如:上午;
t AM/PM缩写 上下午 如:上;
eee 满位毫秒 000-999 如:009;
e 占位毫秒 0-999 如:9;
X 回调字段;
单引号标记部份默认显示为字符串 如:'yyyy' 这样就不会转换为年份;
常用时间格式年月日:yyyy年MM月dd日 yyyy/MM/dd yyyy-MM-dd
常用时间格式时分秒:HH时mm分ss秒 HH:mm:ss
常见完整时间格式:yyyy-MM-dd HH:mm:ss

关键结构:

typedef structKB_DTDateTimeColor
{
DWORDclrText;//文本颜色
DWORDclrEnable;//禁用文本颜色 禁用色默认不启用阴影
DWORDclrSBG;//选中背景色
DWORDclrSText;//选中文本色 选中色默认不启用阴影
//-------------------------------
DWORDclrYear;//年-色彩
DWORDclrMonth;//月-色彩
DWORDclrDayofWeek;//星期几-色彩
DWORDclrDay;//日-色彩
DWORDclrHour;//时-色彩
DWORDclrMinute;//分-色彩
DWORDclrSecond;//秒-色彩
DWORDclrMS;//毫秒-色彩
DWORDclrAPM;//上下午-色彩
DWORDclrCallback;//回调-色彩
//--------------------------------
BOOLBCloseShadow;//当这个值为TRUE时强制关闭字体阴影(有些时候界面库会配置让字体显示阴影)
KB_DTDateTimeColor()
{
ZeroMemory(this,sizeof(KB_DTDateTimeColor));
}
}KB_DTDATETIMECOLOR;

关键函数:

//获取DateTime当前控件的颜色配置
//hWnd:控件句柄
//clrbuf:保存控件当前的色彩配置信息
//反回值:成功反回TRUE 失败反回FALSE

KBLIBRARYAPIBKB_GetDateTimeColor(HWNDhWnd,KB_DTDateTimeColor&clrbuf);

//设置DateTime当前控件的颜色配置
//hWnd:控件句柄
//clr:须要替换的色彩信息
//反回值:成功反回TRUE 失败反回FALSE

KBLIBRARYAPIBKB_SetDateTimeColor(HWNDhWnd,const KB_DTDateTimeColor&clr);

颜色自定

关键指令:

eee 满位毫秒 000-999 如:009;
e 占位毫秒 0-999 如:9;

毫秒支持

Demo我已上传,有不理解的地方可自行查看源码。

http://www.jsqmd.com/news/1123684/

相关文章:

  • ST-GCN 行为识别实战:基于 OpenPose 骨架提取,NTU RGB+D 60 数据集准确率达 85%
  • Python简史
  • 【Springboot毕设全套源码+文档】基于springboot个性化音乐推荐系统的设计与实现(丰富项目+远程调试+讲解+定制)
  • 第四章 QT窗口
  • 国内合规使用大模型指南:避开Gemini代理陷阱
  • Kali Linux学习路线图:从零到精通的网络安全实战指南
  • TI高精度实验室系列(运放):06 压摆率简介
  • 豆包vs Deepseek:不是谁更聪明,而是谁更适合你的具体任务
  • Linux服务器宝塔面板安装图文教程|告别命令行,小白也能轻松运维
  • OpenCV 4.8 频域水印实战:DCT变换嵌入Logo,PSNR 40+ 抗压缩测试
  • Allegro PCB设计中的高效元件查找技巧与实战应用
  • OpenCV实战教程:从环境搭建到人脸识别项目开发
  • 一文讲懂 Agent 核心术语:ReAct、Tool Calling、State、Memory、Workflow 到底是什么
  • 影刀RPA 版本控制与团队协作:流程导出导入-Git管理实战
  • Windows → Windows VSCode Remote SSH 不同子网下的配置流程
  • CNN图像分类实战:从数据到部署全流程解析
  • AI短视频制作:抖音同款背影杀视频全攻略
  • 爬虫转大模型:换个角度用业务场景检验技术取,从岗位要求反推能力栈
  • 智能控制面板PCB设计:触控灵敏度与流畅度优化指南
  • 人工智能与机器学习实战:从入门到部署全流程指南
  • 基于YOLOv8与OpenCV的实时目标检测系统构建与优化指南
  • 华为MetaERP Oracle EBS中核心模块的典型业务场景及对应会计分录。由于无法直接生成Excel文件下载,我将以结构化的Markdown表格形式呈现,你可以直接复制到Excel中保存使用。
  • OpenCore Legacy Patcher完整教程:三步让老旧Mac重获新生的终极指南
  • 在 PyCharm 中调用 阿里云百炼API基础大模型+思考+流式
  • RKNN平台部署YOLOv11 Pose模型实战指南
  • LLM与进化计算融合:智能代码优化新范式
  • 脚本安全:从笑脸漏洞看命令注入原理与自动化检测实践
  • DeepBump终极指南:3步实现AI驱动的法线贴图与高度贴图生成
  • 2026年AI竞赛与黑客松参赛指南与实战技巧
  • SUMO交通仿真软件:从入门到实战应用