源起:
    三年前,当我还是一个学生的时候,同学在用一个类似雪狐迷你钟
    的小软件,具体叫什么现在忘记了,当时这个软件是收费的,不
    过他用的是破解版,呵呵,主要功能包括:
        1. 更换皮肤。
        2. 多种钟面属性(例如:总在最前、嵌入桌面、鼠标穿透)
        3. 可半透明镶嵌在桌面上,不影响其它操作
        4. 抗锯齿,显示更加平滑,美观
        我就拷贝下载网上的说明吧:
        1. 小巧、精致,半透明的镶嵌在桌面背景中 。
        2. 自带四十余种漂亮的皮肤,时钟更加个性!
        3. 半透明,且支持镶嵌在桌面上(按“显示桌面”按钮也无法吃掉她),
            不影响其它操作!
        4. 鼠标穿透功能,程序再也不会影响您的正常工作了 。
        5. 语音报时,并可设置整点、半点报时功能
        6. 超强抗锯齿,使得显示更加平滑,美观。
    为何不自己去实现一个这样的软件呢?当时我就有这样的想法,
    当时的想法,这样一个小东西做起来应该很简单的,这些基本功能实现就好了,
    当时我们正在选修 C#面向组件的开发这样的课程,于是自然采用了C#作为开发
    语言,那时候 Visual Studio 2005 的 Beta 版本刚刚可用,我们就这样开始了。
实现:
    后来发现,直接在.Net Framework 里查找这些需要的功能,都很难找到或者效果
    很差,除了窗口置顶可以直接使用 Form.TopMost 设置之外。于是上网查资料,
    发现调用 Windows API 函数可以实现这些功能。当时查找了C#调用 API 函数的
    资料,倒也简单,只是有些类型的 Marshal 可能需要点儿技巧。
细节:
    当时很快进入了细节,也没有考虑如何降低软件的耦合度,反正急于实现功能,
    整个程序实现在一个项目里面,生成后也就一个 Exe 文件。的确,通过查资料,
    像如何实现异形窗体这们的功能都有了可选的方案,当时找到两种方案,但是效果
    都不理想,别说放大窗体了,连按原始图片大小显示都会有明显的锯齿,这个问题
    真正解决是到了项目后期才找到解决方案的。
    不管怎么说,当时经过了将近一个月时间的摸索,一个还可以用的软件是出来了。
重构:
    很快离开学校去工作了,虽然工作很忙,还是抽时间研究了设计模式,软件重构
    之类的东西,加上工作中也会学到一些东西,回头看看自己的小软件,很不满意,
    于是进行了一通重构。直到现在像点儿样子了。
最近没事,有了把这个项目过程讲一讲的冲动,所谓麻雀虽小,五脏俱全。干
脆写一个系列算了。大至计划如下:
    1. 概述
       介绍项目的背景,展示主要功能,提供可执行文件的下载。就是这次的内容了,
    2. 功能细节,在Windows API 里面查找需要的功能。
       主要讲一讲这些基本功能要用到哪些API函数,以及如何在 C# 里面调用他们。
       例如设计异形窗体的三种方式和各自己的优缺点,以及项目的决策,反锯齿等。
    3. Mediator模式的应用。
       讲述如何让把功能细节的实现分离到别的 class 中,以及如何让菜单工作等。
    4. Memento 模式的应用。
       讲述为何以及如何实现 Memento 模式,同时会对软件设置中的 Preview 功能
       进行介绍。
    5. Balloon提示和Service.
       讲述如何通过重绘设计一个通用气球提示,以及如何使用它。
    6. 持久化存储。
       讲述如何使用.Net 提供的序列化机制保存软件设置,如何通过反序列化重新
       加载这些设置。结合开源项目 SharpDevelop 的源码,讲述如何使用 XmlReader
       和 XmlWriter 实现对所有类型的持久化存储,以及如何用他来代替C#提供的
       序列化机制,同时还会指出SharpDevelop持久化存储现存的一个功能缺失,并
       通过简单的修改弥补这种缺失。
下面是软件的一些截图, 让各位看客先有一个总体印象。

我的 WinClock 软件下载

这是微软技术的一贯特点,使用简单。但是如果要深入的话,还是要投入不少精力的

我的 WinClock 项目系列之一 (概述)相关推荐

  1. Laravel大型项目系列教程(一)

    Laravel大型项目系列教程(一) 一.课程概述 1.课程介绍 本教程将使用Laravel完成一个多用户的博客系统,大概会包含如下内容: 路由管理. 用户管理,如用户注册.修改信息.锁定用户等. 文 ...

  2. 美国兰德公司《未来战争2030》(The Future of Warfare in 2030)系列研究报告概述(下)

    2020年5月11日,美国兰德公司官网发布<未来战争2030>(The Future of Warfare in 2030)系列研究报告. 该系列研究报告包括7份研究报告:分别为一份总报告 ...

  3. BOS项目01_02_项目的相关概述、MySQL创建新用户并授权、数据库环境的配置、Mysql命令行

    系列文章目录 文章目录 系列文章目录 前言 一.项目的相关概述 二.数据库环境的配置--MySQL创建新用户并授权 前言 我们这里的BOS系统是指: 物流业务操作系统 一.项目的相关概述 1.1> ...

  4. 05_ClickHouse、MergeTree系列引擎概述与存储结构、建表模板、建表语句、MergeTree设置、建表示例、数据存储、数据片段(data part)

    2.MergeTree系列引擎概述与存储结构 2.1.建表模板 2.2.建表语句 2.3.MergeTree设置 2.4.建表示例 2.5.数据存储 2.6.数据片段(data part) 2.Mer ...

  5. Laravel大型项目系列教程(五)之文章和标签管理

    Laravel大型项目系列教程(五)之文章和标签管理 本节教程将大概完成文章和标签管理. 1.文章管理 首先创建管理后台文章列表视图: $ php artisan generate:view admi ...

  6. Laravel大型项目系列教程(三)之发表文章

    Laravel大型项目系列教程(三)之发表文章 一.前言 上一节教程中完成了用户管理,这节教程将大概完成发表Markdown格式文章并展示的功能. 二.Let's go 1.数据库迁移 文章模块中我们 ...

  7. Laravel大型项目系列教程(二)之用户管理

    Laravel大型项目系列教程(二) 一.前言 本节教程将大概实现用户的注册.修改个人信息.管理用户功能 二.Let's go 1.创建用户注册视图 <span style="font ...

  8. 采用Opserver来监控你的ASP.NET项目系列(三、监控你的服务器状态)

    前言 之前有过2篇关于如何监控ASP.NET core项目的文章,有兴趣的也可以看看. ASP.NET Core之跨平台的实时性能监控 ASP.NET Core之跨平台的实时性能监控(2.健康检查) ...

  9. atitit 音频 项目 系列功能表 音乐 v3 t67.docx Atitit 音频 项目 系列功能表 1.音频 音乐 语言领域的功能表 听歌识曲功能 酷我功能。 铃声 功能。。 音频切割(按

    atitit 音频 项目 系列功能表 音乐 v3 t67.docx Atitit 音频 项目 系列功能表 音频 音乐 语言领域的功能表 听歌识曲功能 酷我功能. 铃声 功能.. 音频切割(按照副歌部分 ...

最新文章

  1. 基于ECS部署LAMP环境实验记录
  2. 关于inline函数
  3. python工作技巧_Python常用小技巧汇总
  4. 一些java面试高频题
  5. python帮助文档快捷键_Pycharm快捷键手册
  6. cf方框透视易语言代码怎么写_易语言真的那么不入流吗?
  7. 【docker系列】docker之部署springboot项目
  8. java 代码转换_java字符编码转换过程(转)
  9. c#分页读取GB文本文件
  10. 多台Linux服务器一起关机,linux – 一台服务器,两台APC UPS上的冗余电源:如何触发关机?...
  11. scrapy实例三 【豆瓣电影Top250】
  12. 香草 jboss 工具_使用Tensorflow创建香草神经网络
  13. fpga开发教程 labview_NI LabVIEW高性能FPGA开发者指南
  14. 【IIOT】欧姆龙PLC数采之NX/NJ系列
  15. 还在担心找不到驱动程序吗?driveridentifier三步帮你解决所有
  16. 一:使用FreeIPA安装Kerberos和LDAP( IPA-Client安装)
  17. DBA-doing business as
  18. 今日分享非技术之图片大小不得超过80kb
  19. 基于近端策略优化算法的车载边缘计算网络频谱资源分配
  20. python 打印三角形

热门文章

  1. cnpm安装webpack_【6000字】从0到1,配置webpack
  2. linux网络接口数据重新封包,Linux网络之设备接口层:发送数据包流程dev_queue_xmit...
  3. linux java 自启动_Linux设置开机启动脚本
  4. webview加载百度失败_移动AI系列百度paddle.js在助力开发智能化的微信小程序
  5. oracle服务器文件有哪些,Oracle服务器参数文件维护的技巧有哪些呢?
  6. python爬取一条新闻内容_自己做语料——Python爬取新闻联播文字版
  7. 王通讲生物信息学学习方法
  8. 安卓手机管理软件_日程管理软件哪个好?
  9. 概率语言模型及其变形系列-PLSA及EM算法
  10. mongodb 分组聚合_MongoDB学习笔记整理,赶紧收藏起来吧