您的位置:首页 > 其它

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

2008-05-30 18:35 309 查看
源起:

三年前,当我还是一个学生的时候,同学在用一个类似雪狐迷你钟

的小软件,具体叫什么现在忘记了,当时这个软件是收费的,不

过他用的是破解版,呵呵,主要功能包括:

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 软件下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: