一、设计如下图界面

按键“打开时钟”按下后会出现表盘,按键“退出”按下后会关闭页面。

二、多线程初始化和函数初始化

        public Form1(){InitializeComponent();generateBtn();Control.CheckForIllegalCrossThreadCalls = false;}

对按键 重命名

        void generateBtn(){Button bt1 = button1;bt1.Text = "打开时钟";Button bt2 = button2;bt2.Text = "退出";}

三、按键“打开时钟”按下

打开多线程,运行时钟相关程序。

        private void button1_Click(object sender, EventArgs e){ThreadStart thStart = new ThreadStart(Start);Thread thread = new Thread(thStart);thread.Priority = ThreadPriority.Highest;thread.IsBackground = true; //关闭窗体继续执行thread.Start();}

四、时钟主函数

给定表盘圆心坐标和半径,初始化一些画笔颜色和画刷大小以及一些变量,通过半径和圆心计算表盘上各点的坐标,读取并记录电脑上的时间戳,计算时针分针秒针的角度,通过之前计算结果绘制表盘。

每隔一秒(检测读取到的时、分、秒发生变化)擦除一遍页面,重新计算坐标点,重新绘制新的表盘。

        private void Start(){var graph = this.pictureBox1.CreateGraphics();double[] Sin = new double[60];double[] Cos = new double[60];float[] x = new float[60];float[] y = new float[60];float[] x1 = new float[60];float[] y1 = new float[60];float[] x2 = new float[60];float[] y2 = new float[60];float[] x3 = new float[60];float[] y3 = new float[60];float[] x4 = new float[60];float[] y4 = new float[60];float x5 =0;float y5 =0;float r0 = 0;string tradeTime = DateTime.Now.ToString("hhmmss",System.Globalization.DateTimeFormatInfo.InvariantInfo);var pencoler1 = new Pen(Color.Red);var pencoler2 = new Pen(Color.Yellow);var pencoler3 = new Pen(Color.Black);var pensize = new Pen(Color.Black, 3);var pensize1 = new Pen(Color.Red, 2);var pensize2 = new Pen(Color.Black, 4);int i;int z = 0;int x0 = 500;int y0 = 300;int r = 300;int sec, min, hour;int secn = 0, minn = 0, hourn = 0;int Time;for (i = 0; i < 60; i++){//if (i == 0 || i == 30 || i == 15 || i == 45) {  continue; }double d = (((i * 6) - 90) * 3.1415) / 180;Sin[i] = Math.Sin(d);Cos[i] = Math.Cos(d);y[i] = (float)(Sin[i] * r) + y0;x[i] = (float)(Cos[i] * r) + x0;x1[i] = x[i] - (x[i] - x0) / 10;y1[i] = y[i] - (y[i] - y0) / 10;x2[i] = x[i] - (x[i] - x0) / 7 - r / 20;y2[i] = y[i] - (y[i] - y0) / 7 - r / 20;x3[i] = x[i] - (x[i] - x0) / 20;y3[i] = y[i] - (y[i] - y0) / 20;x4[i] = x[i] - (x[i] - x0) / 2;y4[i] = y[i] - (y[i] - y0) / 2;x5 = x0 - r / 40;y5 = y0 - r / 40;r0 = r / 20;}Brush penbrush = new SolidBrush(Color.Black);Font penfont = new Font("华文行楷", r / 20);for (; ; ){tradeTime = DateTime.Now.ToString("hhmmss", System.Globalization.DateTimeFormatInfo.InvariantInfo);Time = int.Parse(tradeTime);sec = Time % 100;min = Time / 100 % 100;hour = Time / 10000;if (hour == 12) { hour = 0; }if (secn != sec || minn != min || hourn != hour){//MessageBox.Show(sec.ToString());graph.Clear(this.BackColor);//graph.DrawEllipse(pencoler2, x0 - r, y0 - r, 2*r, 2*r);for (i = 0; i < 60; i++){if (i % 5 == 0){z = i / 5;if (z == 0) z = 12;graph.DrawLine(pensize, x[i], y[i],x1[i],y1[i]);graph.DrawString(z.ToString(), penfont, penbrush, x2[i], y2[i]);}else{graph.DrawLine(pencoler3, x[i], y[i], x3[i], y3[i]);}}graph.DrawLine(pensize1, x0, y0, x[sec], y[sec]);graph.DrawLine(pensize2, x0, y0, x[min], y[min]);graph.DrawLine(pensize2, x0, y0, x4[hour*5], y4[hour*5]);//graph.DrawPie(pencoler2, x0-r, y0-r, 2*r, 2*r, sec * 6-90, 1);//graph.DrawPie(pencoler3, x0-r , y0-r , r*2, r*2, min * 6-90, 1);//graph.DrawPie(pencoler3, x0-r/2 , y0-r/2 , r, r, hour*30-90, 2);secn = sec;minn = min;hourn = hour;graph.FillEllipse(new SolidBrush(Color.Yellow), x5 , y5 , r0, r0);continue;}}}

五、“退出”按键按下后

得益于多线程的使用,在表盘一直处于死循环监测时间变化的同时,依然能检测到Button的按下。

“退出”按下后,退出页面。

        private void button2_Click(object sender, EventArgs e){Application.Exit();}

六、表盘上各点的计算

C# GDI+ 时钟表盘相关推荐

  1. java实现时钟表盘教程方法

    本文实例为大家分享了java实现时钟表盘的具体代码,供大家参考,具体内容如下 设计并实现一个模拟时钟功能的应用程序.程序中应显示时针.分针和秒针,并同时以数字形式显示当前时间. 实现结果: 源代码如下 ...

  2. LVGL库实现的简单实时时钟表盘示例代码

    LVGL库实现的简单实时时钟表盘示例代码: #include "lvgl.h" #include <time.h>static lv_obj_t * screen; s ...

  3. 【Labplus 3】Scratch时钟表盘角度解析

    Scratch实现时钟的案例也不少,这里就具体设计时针,分针,秒针的细节点进行解析下,方便小朋友们理解. 首先看下绿旗执行后的效果,没有放背景表盘,避免干扰: 角色-针会转动,是因为&面向&a ...

  4. android自定义起止时间的时间刻度尺,Android 自定义View篇(六)实现时钟表盘效果...

    前言 Android 自定义 View 是高级进阶不可或缺的内容,日常工作中,经常会遇到产品.UI 设计出花里胡哨的界面.当系统自带的控件不能满足开发需求时,就只能自己动手撸一个效果. 本文就带自定义 ...

  5. C# WPF时钟表盘 及设置闹钟

    不足之处请大佬修改 表盘设计界面 <Window x:Class="动画表.MainWindow"xmlns="http://schemas.microsoft.c ...

  6. canvas绘制时钟表盘

    关于canvas的API操作详情请阅读文档https://www.runoob.com/html/html5-canvas.html 先来看下效果图: 首先,需要绘制两个圆形作为表盘 var draw ...

  7. Android自定义实现绘制时钟表盘

    效果图: 实现步骤: 绘制表盘[刻度,数字] 绘制指针 让指针走起来~ 具体如下: 绘制表盘: 首先需要计算出刻度的起点和终点坐标值,这里我们通过构建两个半径不同的同心圆,大圆半径减小圆半径,就可以得 ...

  8. Qt实现动态时钟表盘的设计

    目录 头文件 源代码 运行结果 头文件 #ifndef MYWIDGET_H #define MYWIDGET_H#include <QWidget>#include <QPaint ...

  9. 前端例程20210731:圆形表盘时钟布局实现

    文章目录 目的 布局说明 基础准备 数字定位 指针定位 指针运转 完整代码 总结 目的 圆形表盘时钟是界面应用中偶尔会涉及到的东西,圆形表盘时钟实现过程中相对复杂的是其布局,这篇文章将对相关实现做个说 ...

  10. c语言图形时钟编程,C语言图形时钟课程设计实验报告.doc

    C语言图形时钟课程设计实验报告.doc 目录 1.系统功能要求 . 2. 数据结构设计及 说明 . 3.程序结构(画流程图) . 4.各模块的功能 . 5.试验结果(包括输入数据和输出结果) . 6. ...

最新文章

  1. [征询意见]北京.NET俱乐部11月份活动内容
  2. 关注这些技术号,你将拥有半个互联网圈
  3. c++ vector 存放指针_STL-C++ vector部分
  4. Windows下启动各服务命令
  5. 深入剖析Redis RDB持久化机制
  6. POJ-2186 Popular Cows (Tarjan缩点) 文末有测试数据
  7. ImageView的scaleType理解
  8. centos系统在Visual Studio Code 中使用超级管理员权限保存文件
  9. 提示gtk错误,无法打开便器器(sudo gedit filename失败)
  10. centos安装思源黑体
  11. 计算机c盘用户名中文改英文,Win10电脑将中文登录用户名更改为英文名的方法
  12. 别把职场当官斗,聪明人都在自我成长
  13. 【激光SLAM, ROS】激光畸变的校正
  14. 【web前端开发】HTML知识点超详细总结
  15. JS实现动画特效2(缓动函数封装、导航栏筋斗云效果)
  16. 激活windows系列地址
  17. 点云中的Chamfer distance
  18. (转)旅游拍照必读:10个经典人像摄影案例@『国家地理』
  19. 《第一堂棒球课》:职业棒球
  20. STM32配置W5500

热门文章

  1. 【POP3协议介绍】
  2. 【云计算的1024种玩法】搭建 wiki 知识库
  3. java生成pdf表格并插入图片
  4. 人脸识别的流行用途有哪些
  5. win7 旗舰版系统激活方法
  6. 白孩儿--一个网上流传的故事[生活感悟]
  7. ThinkPad 交换 Ctrl 键和 Fn 键
  8. python方法怎么调用_python函数怎么调用自身?
  9. 《缠中说禅108课》6:本 ID 如何在五粮液、包钢权证上提款的
  10. 基于JESD204B的LMK04826时钟芯片开发笔记