這兩天在做一個小軟體,不知道怎麼的,做了近10年的程式員,現在才有這樣的體會,原來開發程式真的很有意思。
當然,要想開發軟體有意思,必須具備一些前提條件,首先,你要有足夠的空餘時間,其次,所開發的軟體是自己的創意,而不是公司用來忽悠客戶的,最後,你必須要有十分的熱情。
那麼,有意思在什麼地方呢?說出來可能有人會笑,有兩方面,一是創意源源不斷地湧出來,二是這些新的創意被逐步地實現。在實現了自己的想法以後,會很有成就感,也很想與人分享。所以,我會在稍後將這個軟體發布出來與大家共用。
這個軟體最初源於一個突然閃出的念頭,某一天我看到一篇關於如何截屏的文章,文章寫得比較粗,不過指出了關鍵點,也就是如何截取螢幕的內容。說白,這也沒什麼,在.net裡也就一條語句能夠實現,於是我便萌發了做一個截屏軟體的念頭。
不過我沒有立即動手,直到有一天這個念頭在我睡覺的時候都在想,於是便開始動手。在流了1滴汗以後,截屏的準系統做好了,可以在螢幕上畫個地區,並且調整這個地區的大小,然後再將地區裡的畫面儲存為一個圖片。
做完以後馬上就有新的創意,因為用過SnagIt,知道它有一個編輯器可以對截下來的圖片再進行一些處理,加點方塊、線條、文字什麼的,於是就打算做一個圖片的編輯器。可是,圖片的的編輯功能可沒有這麼容易,至少對我來說是這樣的,不過既然想到了,就一定要做,否則晚上睡不好。
於是,大概策划了一下,編輯器的功能與VS的表單設計器類似,可以添加、刪除、選擇、拖動對象,而在這裡,所謂的對象就是指一個個的形狀,比如方塊、圓形、文字框什麼的。做這些功能,花了我3滴汗。
等這些功能有了以後,我發現要修改形狀的樣式也是件麻煩的事,比如背景色、線條顏色等,開始的時候放了一個.net內建的屬性編輯器,可立即發現效果並不是太好,於是就想乾脆做個形狀編輯的架構吧,類似於屬性編輯器,不過在介面形式上可以更鬆散。就這樣,花了我5滴汗的功夫把它完成了。
在做編輯器的同時,我發現一個單純的圖片檔案根本不可能儲存附加的圖形資料,必須要自己定義一個檔案格式來儲存資料,這樣,花了我2滴汗設計和檔案格式,以及實現了檔案讀和寫的功能。
等編輯器做得差不多了,我又覺得介面上的菜單與功能的對應不是很方便,需要進行寫入程式碼,這樣開發起來很不方便。這樣,我又花了4滴汗模仿了VS的命令子系統。也就是說,一個菜單或按鈕可以綁定到一個命令,點擊後直接執行命令,菜單由設定檔來產生。
下面輪到主表單了,一開始不知道怎麼設定好,後來想來想去就做了類似資源管理員的樣子,右邊是截屏圖片的列表,那左邊是什麼呢?是目錄列表,在這裡,我又引入了“本地庫”的概念。本地庫就是存放截屏的容器,可以在庫中建立目錄和子目錄,這與Windows的檔案系統相同,不同的目錄可以存放不同用途的截屏,當然,截屏檔案是可以在不同的目錄中移來移去的。於是,我又花了2滴汗。
既然主表單做得象Windows資源管理員,那應該支援檔案的拖放咯。稍微研究了一下,這個功能就實現了。可是能不能直接拖到Windows資源管理員或者其它應用軟體,比如Word裡呢?又是一番研究,實現了。還好這些功能都不是太複雜,只用了1滴汗。
所有的截屏都在庫裡,怎麼把它弄出來呢?當然要提供匯出功能啦。匯出圖片得仔細做,因為它可能會是使用者經常使用的功能,於是花了2滴汗做成功了。
到此為止,大部分功能都有了,但我突然又想到有些人截了屏以後喜歡在圖上放自己的個人資訊,於是想到了增加一個浮水印的功能。浮水印應該是可以有多個,並且可以編輯,這樣就必須與原來的程式相容,利用現有的代碼。又是一頓對原來程式的猛改,浮水印的功能又有了,花了我3滴汗。
是不是大致可以了呢?沒有!選項啊,這是增加使用者體驗一個很重要的方面,又是一陣子改動,花了2滴汗,做好了。
還有什嗎?對了,本地化,這可是邁出國門的必要手段,又花了4滴汗。
現在總行了吧,呵呵。雖然軟體的功能到這裡已經全部說完了,可是創意遠遠不止這些……
如果你在看這篇文章,可能會很奇怪為什麼總是要標出幾滴汗這樣。其實我只是想告訴你,這某個功能的工作量與最初的想法相比,其複雜程度有多少大。開始的時候根本不會想到最後會是什麼樣的東西,回過頭來看,原來真的很有成就感。