公告 欢迎您,我的朋友,目前开放免费注册,注册登录后查看更多内容!开通会员送积分,相应文档随便看,积分充值登录后个人中心内按需充值!
RAR
电脑软件 积分下载 发布于 2026-09-18

【原创】桌面时钟(含使用代码)

clock 时钟控件 winform桌面控件 桌面时钟

资源介绍

AntdClock 时钟控件使用说明

一个纯 GDI+ 自绘的 WinForms 圆形时钟控件(AntdUIClock.AntdClock), 支持透明异形叠加、渐变/背景图表盘、内嵌日历、铭牌 LOGO、拖动与双击交互, 并可通过 app.config 在不改代码的前提下更换铭牌。

说明:下载附件为应用示例,含控件dll,非源码!

目标框架:.NET 8 Windows(net8.0-windows

属性示例

image.png

BDClock.exe运行效果(示例)

image.png


一、目录结构

AntdUIClock.dll是控件
BDClock.exe是实例(可换logo或铭牌信息)

二、核心特点

1. 纯 GDI+ 自绘,零第三方绘制依赖

控件本体(AntdClock)只依赖 System.Drawing,所有表盘、刻度、指针、日历、铭牌全部代码绘制。 AntdUI 包只被控件自带的演示窗体用到,业务项目引用 AntdUIClock.dll不需要引入 AntdUI。

2. 真·圆形异形控件

OnHandleCreated / OnResize 中用 GraphicsPath.AddEllipse + Region 裁剪窗口区域, 控件是真正的圆形,圆外区域不响应鼠标、不遮挡下层内容。 SetBoundsCore 强制等比正方形(边长取 max(宽, 高)),拖放拉伸不会变形。

3. 三级表盘背景,优先级清晰

优先级 方式 开关
1 背景图(Stretch / Tile / Center / Zoom 四种填充) ClockBackground+ClockBackMode
2 径向渐变(中心↔边界,基于 PathGradientBrush ClockGradientMode(None / CenterToEdge / EdgeToCenter)
3 纯色 / 全透明 ClockBackColor(设为 Transparent即镂空)

4. 分层指针绘制

  • 时针 / 分针:前 1/3 用一半线宽、后 2/3 用正常线宽的双段画法(DrawHourHand / DrawMinuteHand),带圆角线帽,立体感更强。
  • 秒针:丝滑模式(角度含毫秒,100ms 刷新),可开启箭头(SecondArrow)。
  • 三层同心中心圆:时针 7 / 分针 5 / 秒针 3(半径 px),颜色自动跟随对应指针色。

5. 表盘刻度

  • 12 个整点文字:阿拉伯数字 / 罗马数字(Ⅰ-Ⅻ)/ 无文字,罗马数字自动切 Segoe UI Symbol 字体。
  • 60 格短刻度,每 5 格自动加长加粗。
  • 可通过 ClockNumbers 自定义 12 个刻度文本(代码赋值,属性窗口隐藏)。

6. 内嵌日历窗

不是独立控件,直接画在表盘内部,可 8 向定位: Top / Bottom / Left / Right / TopLeft / TopRight / BottomLeft / BottomRight, 支持"月-日"单行或"月-日 + 星期"双行、实线/虚线边框、独立前景/背景色。

7. 铭牌 LOGO(图片优先于文本)

  • nameplate.png 或配置了 NameplateImage → 显示图片(支持 DPI 缩放 + 0~255 透明度)。
  • 无图片 → 显示 NameplateText 文本(12 点正下方,NameplateOffsetY 调上下位置)。
  • 图片尺寸/透明度/偏移均可在属性窗口直接调。

8. 丰富的交互

操作 行为 相关属性
拖动 不拖动 / 拖动父窗体 / 在父容器内拖动自身 DragTarget
双击表芯(秒针中心圆) 循环切换 4 套预置主题 内置
双击日历 关闭父窗体 / 隐藏日历 / 隐藏自身 / 无动作 CalDblClickAction
鼠标悬停热区 表芯与日历区域自动变手型光标 内置
置顶 自动把父 Form.TopMost置真 SetParentTopMost

9. 4 套预置主题(双击表芯循环切换)

主题 特征
Default 深绿边框 + 白→浅蓝由外向内渐变 + 阿拉伯数字
Modern 深绿边框 + 浅黄→黑由内向外渐变 + 橙色秒针 + 白色日历字
Classic 棕色 6px 粗边框 + 米色复古底 + 罗马数字
Minimalist 1px 黑边 + 纯白底 + 无刻度文字

10. DPI 感知

所有尺寸(指针宽度、刻度线宽、日历框、字体、铭牌)统一走 GetDpiScaledSize()dpiScale = DpiX / 96 并钳制在 0.8 ~ 1.1,高 DPI 下不会糊也不会过度放大。 铭牌额外提供 NameplateDpiAware / NameplateImageDpiAware 独立开关。

11. 配置外置

铭牌文本、铭牌图片名、铭牌偏移、日历距离可从 app.config 读取, 换 LOGO 只改配置文件 + 换 png,无需重新编译

12. 资源管理

Dispose 中统一释放 Timer、SoundPlayer、表盘背景图、铭牌图、日历字体; NameplateImage setter 也会自动释放旧图,避免频繁换图内存泄漏。


三、快速开始

方式 A:引用 DLL(推荐,业务项目无需 AntdUI)

<!-- BDClock.csproj -->
<ItemGroup>
  <Reference Include="AntdUIClock">
    <HintPath>bin\Debug\net8.0-windows\AntdUIClock.dll</HintPath>
  </Reference>
</ItemGroup>

方式 B:设计器拖放

编译 AntdUIClock 项目 → 在目标窗体设计器中右键工具箱 → "选择项" → 浏览 AntdUIClock.dllAntdClock 会出现在工具箱,直接拖到窗体上,然后在属性窗口按分类调节 (表盘样式 / 指针样式 / 日历样式 / 铭牌样式 / 交互控制 / 秒针音效)。

方式 C:纯代码创建(桌面时钟)

using AntdUIClock;

var clock = new AntdClock
{
    Size              = new Size(250, 250),
    DragTarget        = DragTarget.ParentForm,               // 拖动整个窗口
    CalDblClickAction = DoubleClickCalendarAction.CloseParentForm, // 双击日历退出
    ClockNumberStyle  = ClockNumberStyles.Arabic,
    ClockGradientMode = ClockGradientMode.EdgeToCenter,
    ClockBorderWidth  = 0,
    SecondColor       = Color.Orange,
    CalDistance       = 65f,
    NameplateOffsetY  = 10f,
    NameplateImageSize= new Size(64, 64),
    NameplateText     = "JIUAI",        // 无图片时生效
    Parent            = this,
};
Controls.Add(clock);
clock.BringToFront();

做成桌面透明时钟(关键 4 行)

FormBorderStyle = FormBorderStyle.None;
TopMost         = true;
ShowInTaskbar   = false;
BackColor       = Color.Magenta;   // 透明键色
TransparencyKey = Color.Magenta;   // 与 BackColor 同色 → 该色全透明
Opacity         = 0.7;             // 可选:整体半透明

四、属性参考

表盘样式

属性 类型 默认 说明
ClockBackground Image null 背景图,优先级最高
ClockBackMode BackgroundMode Zoom Stretch/Tile/Center/Zoom
ClockGradientMode ClockGradientMode None None/CenterToEdge/EdgeToCenter
GradientStartColor Color White 渐变起始色(CenterToEdge时为中心色)
GradientEndColor Color LightBlue 渐变结束色
ClockBackColor Color White 纯色底;Transparent时镂空
ClockBorderColor Color DarkGreen 外圈颜色
ClockBorderWidth float 4 外圈粗细,0不绘制
ClockNumberStyle ClockNumberStyles Arabic Arabic/Roman/None
ClockNumberColor Color DarkGreen 数字与 60 格刻度线颜色
ClockNumbers string[] null 自定义 12 个刻度文本(需 12 项,仅代码)

BackColor 已重写为强制透明并在属性窗口隐藏,请统一使用 ClockBackColor

指针样式

属性 默认 说明
HourColor/MinuteColor/SecondColor MediumSeaGreen/DarkOrange/Silver 三针颜色
HourWidth/MinuteWidth/SecondWidth 8/6/2 线宽(px)
HourLength/MinuteLength/SecondLength 0.45/0.65/0.8 长度,半径比例;秒针最大钳制为 0.9
SecondArrow true 秒针是否带箭头
SecondArrowLength 8 箭头长度(px)
SecondCenterStyle Hollow Solid/Hollow同时作用于时/分/秒三个中心圆
SecondCenterBorder 1 空心圆环线宽
SecondCenterFillColor Lime 中心圆填充色
SecondCenterBorderColor DarkOrange 空心圆环边框色
HourCenterRadius/MinuteCenterRadius/SecondCenterRadius 7/5/3 三层中心圆半径(px)

只读同步属性:HourCenterColor / MinuteCenterColor / SecondCenterColor,自动等于对应指针色。

日历样式

属性 默认 说明
CalVisable true 总开关
CalTodayVisable true 显示 MM-dd
CalWeekdayVisible true 显示星期(关闭时高度可设~25,开启建议 ≥45)
CalFont 微软雅黑 8pt 日历字体
CalBackColor/CalForeColor Transparent/Black 背景 / 文字色
CalBorderColor/CalBorderWidth/CalBorderStyle LightGray/0/Solid 边框(宽度需 > 0 才显示)
CalSize 60, 50 日历框尺寸(宽, 高)
CalAnchor Right 8 向锚点
CalDistance 60 离圆心距离;等于 60 时自动取 半径 / 2
CalPadding 4 文字内边距
CalDblClickAction HideSelf CloseParentForm/HideCalendar/HideSelf/None

铭牌样式

属性 默认 说明
NameplateImage null 铭牌图片,优先级高于文本
NameplateImageSize 48, 48 显示尺寸;Empty用原始尺寸
NameplateImageDpiAware true 图片尺寸随 DPI 缩放
NameplateImageOpacity 255 透明度 0~255
NameplateText JIUAI 无图片时显示的文本
NameplateFont 微软雅黑 10pt Bold 文本字体
NameplateForeColor DimGray 文本颜色
NameplateOffsetY 40 相对 12 点的垂直偏移,正数向下
NameplateDpiAware false 文本字体与偏移随 DPI 缩放

交互控制 / 音效

属性 默认 说明
DragTarget None None/ParentForm/SelfInParent
SetParentTopMost false 自动置顶父 Form(父容器非 Form 时不生效)
TickSoundFile null 秒音文件,仅支持 .wav
EnableTickSound false 开启秒音(丝滑模式下不建议开启)
CurrentTime 只读 当前时间

五、配置文件(BDClock.dll.config)

宿主程序编译后,App.config 会输出为 BDClock.dll.config(与 exe 同目录)。 控件启动时通过内部 ClockConfig 读取,只覆盖"用户配置过的项",其余保持默认值。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <!-- 铭牌文本 -->
    <add key="NameplateText" value="JIUAI" />
    <!-- 铭牌图片名(放在exe同目录,不需要路径) -->
    <add key="NameplateImage" value="nameplate.png" />
    <!-- 铭牌垂直偏移(纯数字,不要带 f 后缀) -->
    <add key="NameplateOffsetY" value="10" />
    <!-- 日历距离中心(纯数字,不要带 f 后缀) -->
    <add key="CalDistance" value="65" />
    <!-- 表盘数字样式:Arabic(数字 1-12)/ Roman(罗马数字 Ⅰ-Ⅻ)/ None(无刻度文字) -->
    <add key="ClockNumberStyle" value="Arabic" />
  </appSettings>
</configuration>

免责声明

根据我国《计算机软件保护条例》第十七条规定:“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24小时之内删除,否则后果均由用户承担责任。