开发软件真是一件有意思的事情
這兩天在做一個(gè)小軟件,不知道怎么的,做了近10年的程序員,現(xiàn)在才有這樣的體會(huì),原來(lái)開(kāi)發(fā)程序真的很有意思。
當(dāng)然,要想開(kāi)發(fā)軟件有意思,必須具備一些前提條件,首先,你要有足夠的空余時(shí)間,其次,所開(kāi)發(fā)的軟件是自己的創(chuàng)意,而不是公司用來(lái)忽悠客戶的,最后,你必須要有十分的熱情。
那么,有意思在什么地方呢?說(shuō)出來(lái)可能有人會(huì)笑,有兩方面,一是創(chuàng)意源源不斷地涌出來(lái),二是這些新的創(chuàng)意被逐步地實(shí)現(xiàn)。在實(shí)現(xiàn)了自己的想法以后,會(huì)很有成就感,也很想與人分享。所以,我會(huì)在稍后將這個(gè)軟件發(fā)布出來(lái)與大家共享。
這個(gè)軟件最初源于一個(gè)突然閃出的念頭,某一天我看到一篇關(guān)于如何截屏的文章,文章寫得比較粗,不過(guò)指出了關(guān)鍵點(diǎn),也就是如何截取屏幕的內(nèi)容。說(shuō)白,這也沒(méi)什么,在.net里也就一條語(yǔ)句能夠?qū)崿F(xiàn),于是我便萌發(fā)了做一個(gè)截屏軟件的念頭。
不過(guò)我沒(méi)有立即動(dòng)手,直到有一天這個(gè)念頭在我睡覺(jué)的時(shí)候都在想,于是便開(kāi)始動(dòng)手。在流了1滴汗以后,截屏的基本功能做好了,可以在屏幕上畫個(gè)區(qū)域,并且調(diào)整這個(gè)區(qū)域的大小,然后再將區(qū)域里的畫面保存為一個(gè)圖片。
做完以后馬上就有新的創(chuàng)意,因?yàn)橛眠^(guò)SnagIt,知道它有一個(gè)編輯器可以對(duì)截下來(lái)的圖片再進(jìn)行一些處理,加點(diǎn)方塊、線條、文字什么的,于是就打算做一個(gè)圖片的編輯器。可是,圖片的的編輯功能可沒(méi)有這么容易,至少對(duì)我來(lái)說(shuō)是這樣的,不過(guò)既然想到了,就一定要做,否則晚上睡不好。
于是,大概策劃了一下,編輯器的功能與VS的窗體設(shè)計(jì)器類似,可以添加、刪除、選擇、拖動(dòng)對(duì)象,而在這里,所謂的對(duì)象就是指一個(gè)個(gè)的形狀,比如方塊、圓形、文字框什么的。做這些功能,花了我3滴汗。
等這些功能有了以后,我發(fā)現(xiàn)要修改形狀的樣式也是件麻煩的事,比如背景色、線條顏色等,開(kāi)始的時(shí)候放了一個(gè).net自帶的屬性編輯器,可立即發(fā)現(xiàn)效果并不是太好,于是就想干脆做個(gè)形狀編輯的架構(gòu)吧,類似于屬性編輯器,不過(guò)在界面形式上可以更松散。就這樣,花了我5滴汗的功夫把它完成了。
在做編輯器的同時(shí),我發(fā)現(xiàn)一個(gè)單純的圖片文件根本不可能保存附加的形狀數(shù)據(jù),必須要自己定義一個(gè)文件格式來(lái)存儲(chǔ)數(shù)據(jù),這樣,花了我2滴汗設(shè)計(jì)和文件格式,以及實(shí)現(xiàn)了文件讀和寫的功能。
等編輯器做得差不多了,我又覺(jué)得界面上的菜單與功能的對(duì)應(yīng)不是很方便,需要進(jìn)行硬編碼,這樣開(kāi)發(fā)起來(lái)很不方便。這樣,我又花了4滴汗模仿了VS的命令子系統(tǒng)。也就是說(shuō),一個(gè)菜單或按鈕可以綁定到一個(gè)命令,點(diǎn)擊后直接執(zhí)行命令,菜單由配置文件來(lái)生成。
下面輪到主窗體了,一開(kāi)始不知道怎么設(shè)置好,后來(lái)想來(lái)想去就做了類似資源管理器的樣子,右邊是截屏圖片的列表,那左邊是什么呢?是目錄列表,在這里,我又引入了“本地庫(kù)”的概念。本地庫(kù)就是存放截屏的容器,可以在庫(kù)中建立目錄和子目錄,這與Windows的文件系統(tǒng)相同,不同的目錄可以存放不同用途的截屏,當(dāng)然,截屏文件是可以在不同的目錄中移來(lái)移去的。于是,我又花了2滴汗。
既然主窗體做得象Windows資源管理器,那應(yīng)該支持文件的拖放咯。稍微研究了一下,這個(gè)功能就實(shí)現(xiàn)了。可是能不能直接拖到Windows資源管理器或者其它應(yīng)用軟件,比如Word里呢?又是一番研究,實(shí)現(xiàn)了。還好這些功能都不是太復(fù)雜,只用了1滴汗。
所有的截屏都在庫(kù)里,怎么把它弄出來(lái)呢?當(dāng)然要提供導(dǎo)出功能啦。導(dǎo)出圖片得仔細(xì)做,因?yàn)樗赡軙?huì)是用戶經(jīng)常使用的功能,于是花了2滴汗做成功了。
到此為止,大部分功能都有了,但我突然又想到有些人截了屏以后喜歡在圖上放自己的個(gè)人信息,于是想到了增加一個(gè)水印的功能。水印應(yīng)該是可以有多個(gè),并且可以編輯,這樣就必須與原來(lái)的程序兼容,利用現(xiàn)有的代碼。又是一頓對(duì)原來(lái)程序的猛改,水印的功能又有了,花了我3滴汗。
是不是大致可以了呢?沒(méi)有!選項(xiàng)啊,這是增加用戶體驗(yàn)一個(gè)很重要的方面,又是一陣子改動(dòng),花了2滴汗,做好了。
還有什么?對(duì)了,本地化,這可是邁出國(guó)門的必要手段,又花了4滴汗。
現(xiàn)在總行了吧,呵呵。雖然軟件的功能到這里已經(jīng)全部說(shuō)完了,可是創(chuàng)意遠(yuǎn)遠(yuǎn)不止這些……
?
如果你在看這篇文章,可能會(huì)很奇怪為什么總是要標(biāo)出幾滴汗這樣。其實(shí)我只是想告訴你,這某個(gè)功能的工作量與最初的想法相比,其復(fù)雜程度有多少大。開(kāi)始的時(shí)候根本不會(huì)想到最后會(huì)是什么樣的東西,回過(guò)頭來(lái)看,原來(lái)真的很有成就感。
轉(zhuǎn)載于:https://www.cnblogs.com/effun/archive/2011/01/19/1939522.html
與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的开发软件真是一件有意思的事情的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java进阶 | Proxy动态代理机制
- 下一篇: maven nexus 说明