我的 WinClock 项目系列之一 (概述)

源起:
    三年前,当我还是一个学生的时候,同学在用一个类似雪狐迷你钟
    的小软件,具体叫什么现在忘记了,当时这个软件是收费的,不
    过他用的是破解版,呵呵,主要功能包括:
        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 软件下载

posted on 2008-05-30 18:35  优哉@游哉  阅读(3062)  评论(25编辑  收藏  举报

导航