这两天在做一个小软件,不知道怎么的,做了近10年的程序员,现在才有这样的体会,原来开发程序真的很有意思。
当然,要想开发软件有意思,必须具备一些前提条件,首先,你要有足够的空余时间,其次,所开发的软件是自己的创意,而不是公司用来忽悠客户的,最后,你必须要有十分的热情。
那么,有意思在什么地方呢?说出来可能有人会笑,有两方面,一是创意源源不断地涌出来,二是这些新的创意被逐步地实现。在实现了自己的想法以后,会很有成就感,也很想与人分享。所以,我会在稍后将这个软件发布出来与大家共享。
这个软件最初源于一个突然闪出的念头,某一天我看到一篇关于如何截屏的文章,文章写得比较粗,不过指出了关键点,也就是如何截取屏幕的内容。说白,这也没什么,在.net里也就一条语句能够实现,于是我便萌发了做一个截屏软件的念头。
不过我没有立即动手,直到有一天这个念头在我睡觉的时候都在想,于是便开始动手。在流了1滴汗以后,截屏的基本功能做好了,可以在屏幕上画个区域,并且调整这个区域的大小,然后再将区域里的画面保存为一个图片。
做完以后马上就有新的创意,因为用过SnagIt,知道它有一个编辑器可以对截下来的图片再进行一些处理,加点方块、线条、文字什么的,于是就打算做一个图片的编辑器。可是,图片的的编辑功能可没有这么容易,至少对我来说是这样的,不过既然想到了,就一定要做,否则晚上睡不好。
于是,大概策划了一下,编辑器的功能与VS的窗体设计器类似,可以添加、删除、选择、拖动对象,而在这里,所谓的对象就是指一个个的形状,比如方块、圆形、文字框什么的。做这些功能,花了我3滴汗。
等这些功能有了以后,我发现要修改形状的样式也是件麻烦的事,比如背景色、线条颜色等,开始的时候放了一个.net自带的属性编辑器,可立即发现效果并不是太好,于是就想干脆做个形状编辑的架构吧,类似于属性编辑器,不过在界面形式上可以更松散。就这样,花了我5滴汗的功夫把它完成了。
在做编辑器的同时,我发现一个单纯的图片文件根本不可能保存附加的形状数据,必须要自己定义一个文件格式来存储数据,这样,花了我2滴汗设计和文件格式,以及实现了文件读和写的功能。
等编辑器做得差不多了,我又觉得界面上的菜单与功能的对应不是很方便,需要进行硬编码,这样开发起来很不方便。这样,我又花了4滴汗模仿了VS的命令子系统。也就是说,一个菜单或按钮可以绑定到一个命令,点击后直接执行命令,菜单由配置文件来生成。
下面轮到主窗体了,一开始不知道怎么设置好,后来想来想去就做了类似资源管理器的样子,右边是截屏图片的列表,那左边是什么呢?是目录列表,在这里,我又引入了“本地库”的概念。本地库就是存放截屏的容器,可以在库中建立目录和子目录,这与Windows的文件系统相同,不同的目录可以存放不同用途的截屏,当然,截屏文件是可以在不同的目录中移来移去的。于是,我又花了2滴汗。
既然主窗体做得象Windows资源管理器,那应该支持文件的拖放咯。稍微研究了一下,这个功能就实现了。可是能不能直接拖到Windows资源管理器或者其它应用软件,比如Word里呢?又是一番研究,实现了。还好这些功能都不是太复杂,只用了1滴汗。
所有的截屏都在库里,怎么把它弄出来呢?当然要提供导出功能啦。导出图片得仔细做,因为它可能会是用户经常使用的功能,于是花了2滴汗做成功了。
到此为止,大部分功能都有了,但我突然又想到有些人截了屏以后喜欢在图上放自己的个人信息,于是想到了增加一个水印的功能。水印应该是可以有多个,并且可以编辑,这样就必须与原来的程序兼容,利用现有的代码。又是一顿对原来程序的猛改,水印的功能又有了,花了我3滴汗。
是不是大致可以了呢?没有!选项啊,这是增加用户体验一个很重要的方面,又是一阵子改动,花了2滴汗,做好了。
还有什么?对了,本地化,这可是迈出国门的必要手段,又花了4滴汗。
现在总行了吧,呵呵。虽然软件的功能到这里已经全部说完了,可是创意远远不止这些……
如果你在看这篇文章,可能会很奇怪为什么总是要标出几滴汗这样。其实我只是想告诉你,这某个功能的工作量与最初的想法相比,其复杂程度有多少大。开始的时候根本不会想到最后会是什么样的东西,回过头来看,原来真的很有成就感。