学生黑客联盟-官网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 213|回复: 9

桌面版罗马时钟

[复制链接]

该用户从未签到

2

主题

2

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2021-9-13 17:03:26 | 显示全部楼层 |阅读模式
女朋友刷B站看到了一个web实现罗马时钟视频,她觉得很好看,想要一个桌面版的,就随手做了个。功能比较简单,就直接放代码了。效果如图。程序全屏运行,设置了背景透明和鼠标穿透。所以基本相当于桌面存在(但是会浮在桌面图标上方,后面有时间看能不能处理成壁纸那样)。隐藏了任务栏图标,所以退出要从任务管理器杀死(后面优化),附件是我编译好的程序。 TBC新兵交流-女朋友刷B站看到了一个web实现罗马时钟视频,她觉得很好看,想要一个桌面版的,就随手做了个。功能比较简单(1) xiaozhou.zip(6.99 KB, 下载次数: 78)2021-5-7 18:15 上传
点击文件名下载附件



TBC新兵交流-女朋友刷B站看到了一个web实现罗马时钟视频,她觉得很好看,想要一个桌面版的,就随手做了个。功能比较简单(2)
[C#]  
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Runtime.InteropServices;
  8. using System.Text;
  9. using System.Windows.Forms;
  10. namespace xiaozhou
  11. {
  12.     public partial class Form1 : Form
  13.     {
  14.         int fontSize = 16;
  15.         string[] month = {"1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月" };
  16.         string[] days = { "1号", "2号", "3号", "4号", "5号", "6号", "7号", "8号", "9号", "10号", "11号", "12号", "13号", "14号", "15号", "16号", "17号", "18号", "19号", "20号", "21号", "22号", "23号", "24号", "25号", "26号", "27号", "28号", "29号", "30号" , "31号" };
  17.         string[] hours = { "0点", "1点", "2点", "3点", "4点", "5点", "6点", "7点", "8点", "9点", "10点", "11点", "12点", "13点", "14点", "15点", "16点", "17点", "18点", "19点", "20点", "21点", "22点", "23点" };
  18.         string[] mins = { "1分", "2分", "3分", "4分", "5分", "6分", "7分", "8分", "9分", "10分", "11分", "12分", "13分", "14分", "15分", "16分", "17分", "18分", "19分", "20分", "21分", "22分", "23分", "24分", "25分", "26分", "27分", "28分", "29分", "30分", "31分", "32分", "33分", "34分", "35分", "36分", "37分", "38分", "39分", "40分", "41分", "42分", "43分", "44分", "45分", "46分", "47分", "48分", "49分", "50分", "51分", "52分", "53分", "54分", "55分", "56分", "57分", "58分", "59分", "60分" };
  19.         string[] secs = { "1秒", "2秒", "3秒", "4秒", "5秒", "6秒", "7秒", "8秒", "9秒", "10秒", "11秒", "12秒", "13秒", "14秒", "15秒", "16秒", "17秒", "18秒", "19秒", "20秒", "21秒", "22秒", "23秒", "24秒", "25秒", "26秒", "27秒", "28秒", "29秒", "30秒", "31秒", "32秒", "33秒", "34秒", "35秒", "36秒", "37秒", "38秒", "39秒", "40秒", "41秒", "42秒", "43秒", "44秒", "45秒", "46秒", "47秒", "48秒", "49秒", "50秒", "51秒", "52秒", "53秒", "54秒", "55秒", "56秒", "57秒", "58秒", "59秒", "60秒" };
  20.         public Form1()
  21.         {
  22.             InitializeComponent();
  23.             SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景.
  24.             SetStyle(ControlStyles.DoubleBuffer, true); // 双缓冲
  25.         }
  26.         /// <summary>
  27.         /// 获取时间戳
  28.         /// </summary>
  29.         /// <returns></returns>
  30.         public string GetTimeStamp()
  31.         {
  32.             TimeSpan ts = DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0);
  33.             return Convert.ToInt64(ts.TotalSeconds).ToString();
  34.         }
  35.         private void Form1_Load(object sender, EventArgs e)
  36.         {
  37.             Console.WriteLine(DateTime.Now.Year);
  38.             this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
  39.             this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
  40.             this.BackColor = Color.Black;
  41.             this.TransparencyKey = this.BackColor;
  42.             SetWindowLong(this.Handle, -20, 0x20 | 0x80000);
  43.             Timer timer2 = new Timer();
  44.             timer2.Interval = 1000;//设置中断时间 单位ms
  45.             timer2.Enabled = true;
  46.             timer2.Tick += new EventHandler(timer1EventProcessor);//添加事件
  47.         }
  48.         private void timer1EventProcessor(object sender, EventArgs e)
  49.         {
  50.             Form1_Paint(sender, null);
  51.         }
  52.         [DllImport("user32.dll")]
  53.         public static extern uint SetWindowLong(IntPtr h, int n, uint x);
  54.         private void Form1_Paint(object sender, PaintEventArgs e)
  55.         {
  56.             int interval = 50;//每个圆环的间隔
  57.             int nowMonth = DateTime.Now.Month - 1;
  58.             int nowDay = DateTime.Now.Day - 1;
  59.             int nowHour = DateTime.Now.Hour ;
  60.             int nowMin = DateTime.Now.Minute ;
  61.             int nowSec = DateTime.Now.Second ;
  62.             Graphics g = this.CreateGraphics();
  63.             //单色填充
  64.             SolidBrush b1 = new SolidBrush(Color.Gray);//定义单色画刷
  65.             SolidBrush b2 = new SolidBrush(Color.Red);//定义单色画刷 
  66.             var format = new StringFormat()
  67.             {
  68.                 Alignment = StringAlignment.Near,
  69.                 LineAlignment = StringAlignment.Near,
  70.             };
  71.             interval = (Height / 2 - 50) / 5;//最大半径5等分
  72.             //转变坐标轴角度
  73.             g.Clear(Color.Black);
  74.             g.TranslateTransform(Width/2, Height/2);
  75.             Console.WriteLine("test");
  76.             for (int i = 0; i < month.Length; i++)
  77.             {
  78.                 if (i == 0)
  79.                 {
  80.                     g.DrawString(month[(i+ nowMonth)% month.Length], new Font("Arial", fontSize), b2, 50, 0, format);
  81.                 }
  82.                 else
  83.                 {
  84.                     g.DrawString(month[(i + nowMonth) % month.Length], new Font("Arial", fontSize), b1, 50, 0, format);
  85.                 }
  86.                 g.RotateTransform(360f / month.Length);//每旋转一度就画一条线
  87.             }
  88.             for (int i = 0; i < days.Length; i++)
  89.             {
  90.                 if (i == 0)
  91.                 {
  92.                     g.DrawString(days[(i + nowDay) % days.Length], new Font("Arial", fontSize), b2, (50 + interval), 0, format);
  93.                 }
  94.                 else
  95.                 {
  96.                     g.DrawString(days[(i + nowDay) % days.Length], new Font("Arial", fontSize), b1, (50 + interval), 0, format);
  97.                 }
  98.                 g.RotateTransform(360f / days.Length);//每旋转一度就画一条线
  99.             }
  100.             for (int i = 0; i < hours.Length; i++)
  101.             {
  102.                 if (i == 0)
  103.                 {
  104.                     g.DrawString(hours[(i + nowHour) % hours.Length], new Font("Arial", fontSize), b2, (50 + interval * 2), 0, format);
  105.                 }
  106.                 else
  107.                 {
  108.                     g.DrawString(hours[(i + nowHour) % hours.Length], new Font("Arial", fontSize), b1, (50 + interval * 2), 0, format);
  109.                 }
  110.                 g.RotateTransform(360f / hours.Length);//每旋转一度就画一条线
  111.             }
  112.             for (int i = 0; i < mins.Length; i++)
  113.             {
  114.                 if (i == 0)
  115.                 {
  116.                     g.DrawString(mins[(i + nowMin-1) % mins.Length], new Font("Arial", fontSize), b2, (50 + interval * 3), 0, format);
  117.                 }
  118.                 else
  119.                 {
  120.                     g.DrawString(mins[(i + nowMin-1) % mins.Length], new Font("Arial", fontSize), b1, (50 + interval * 3), 0, format);
  121.                 }
  122.                 g.RotateTransform(360f / mins.Length);//每旋转一度就画一条线
  123.             }
  124.             for (int i = 0; i < secs.Length; i++)
  125.             {
  126.                 if (i == 0)
  127.                 {
  128.                     g.DrawString(secs[(i + nowSec) % secs.Length], new Font("Arial", fontSize), b2, (50 + interval * 4), 0, format);
  129.                 }
  130.                 else
  131.                 {
  132.                     g.DrawString(secs[(i + nowSec) % secs.Length], new Font("Arial", fontSize), b1, (50 + interval * 4), 0, format);
  133.                 }
  134.                 g.RotateTransform(360f / secs.Length);//每旋转一度就画一条线
  135.             }
  136.             g.Dispose();
  137.         }
  138.     }
  139. }
复制代码

该用户从未签到

0

主题

1679

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2021-9-13 17:04:08 | 显示全部楼层
这个我没找到好的解决办法,不重绘的话又残影影响。我可以给你一个思路,你可以尝试不用绘图 用label标签 ,但是label怎么旋转我没太细看
回复

使用道具 举报

该用户从未签到

0

主题

1679

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2021-9-13 17:04:35 | 显示全部楼层
这方面我不太清楚,因为我这个简单,所以直接复刻的
回复

使用道具 举报

该用户从未签到

0

主题

1679

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2021-9-13 17:05:25 | 显示全部楼层
有学习桌面程序应用开发的推荐吗?emmm,这款软件是c#写的吗
回复

使用道具 举报

该用户从未签到

0

主题

1679

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2021-9-13 17:05:39 | 显示全部楼层
没附带源码
回复

使用道具 举报

该用户从未签到

0

主题

1679

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2021-9-13 17:05:58 | 显示全部楼层
感谢分享,我去做一个。
回复

使用道具 举报

该用户从未签到

1

主题

1571

帖子

1045

积分

金牌会员

Rank: 6Rank: 6

积分
1045
发表于 2021-9-13 17:06:03 | 显示全部楼层
有办法让它转的时候不跳嘛,这样一直跳挺晃眼的
回复

使用道具 举报

该用户从未签到

3

主题

1614

帖子

893

积分

高级会员

Rank: 4

积分
893
发表于 2021-9-13 17:06:12 | 显示全部楼层
@校友网 Wallpaper Engine
回复

使用道具 举报

该用户从未签到

1

主题

1571

帖子

1045

积分

金牌会员

Rank: 6Rank: 6

积分
1045
发表于 2021-9-13 17:06:32 | 显示全部楼层
感谢,我有时间去试试
回复

使用道具 举报

该用户从未签到

0

主题

1679

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2021-9-13 17:06:46 | 显示全部楼层
怎么设置呀,求教
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭Powered by ©科大讯飞语音云

QQ|Archiver|手机版|小黑屋|TBC ( 鄂ICP备19004742号(鄂ICP备19004742号-2) )|网站地图|鄂ICP备19004742号(鄂ICP备19004742号-2) 联系站长

GMT+8, 2021-9-23 14:09 , Processed in 1.312500 second(s), 38 queries .

Powered by TBC! X3.4

© 2001-2020 TBC.. 技术支持 by 复仇者黑客组织

快速回复 返回顶部 返回列表