HTControl介面庫
作者 |
李海濤 |
日期 |
2012-10-01 |
|
文檔只是簡要說明,下載樣本工程能夠更好地瞭解 |
一 起因及樣本下載
VC介面編程為開發人員提供了預設控制項,但是這些控制項很多情況並不能滿足一些軟體的需求,從外觀上來說,預設控制項都是統一的灰色,總不能讓使用者去更改系統主題,主題外觀也不一定是使用者想要的。控制項的行為也不一定能滿足需求,比如CSliderCtrl,當使用者點擊視窗某處時,滑塊不一定停留在滑鼠下面,但是有些情況需要滑塊停留在滑鼠下面,比如播放進度的控制。
正是因為有很多類似的情況,所以一些所謂”第三方”介面庫出現了,還出現了所謂的DirectUI,其實就是無子視窗。但是這些介面庫有些價格不低,個人購買的話不大合適。
我習慣對自己的代碼進行完全的掌控,用別人或其它公司的介面庫總不太放心,也不方便調試。而且需求是千變萬化的,一種介面庫不能滿足所有的需求,可以做一些比較通用的控制項,開發具體業務軟體時可能會有幾種控制項需要定製,通用的控制項肯定是佔大多數的,這樣就不會嚴重影響開發進度。
所以我獨立設計並開發了自己的HTControl介面庫,沒想到啥合適的名字,”HT”名字首字母,”Control”取控制項的意思, 並做了一個樣本工程HTControlDemo,可以在http://download.csdn.net/detail/htcontrol/5453249下載。需要調試的需要安裝VS2005或以上版本,只想看看效果的直接開啟EXE即可,希望大家多提寶貴意見。工程中的圖片都是七拼八湊的,有些是我用PS做的(PS用的很爛),大家只看介面庫實現的功能吧,美化需要專業美工人員。
先簡要說明一下,以後會有文章具體介紹 (其實也不需要介紹啥,一看標頭檔全明白了)。只要我有空餘時間,就會不斷地更新和擴充此介面庫。
二 簡易的使用方式
介面庫中控制項都是獨立的C++類,它們之間沒有複雜關係,注意事項也幾乎沒有,要想實現某個功能直接調用介面即可。舉個MFC的例子:
更改CStatic的背景色使它與父視窗一致,熟悉MFC開發的都知道:添加OnCtlColor或者重繪控制項。這麼小的一件事,不應該這樣麻煩。從類的角度來說,應該調用一個介面傳遞一個顏色參數即可,HTControl介面庫的做法如下:
m_HTStcR.SetParentBgColor(m_clrBg);
三 靈活的介面表現
現在很多軟體都支援換膚,實現原理就是重繪,但是每次換膚都修改代碼重繪的話就太麻煩了。一種靈活的做法就是在控制項上繪製載入的外界圖片,當需要換膚的時候不用更改代碼,只需更換圖片。HTControl介面庫支援這種做法。
四 介面無閃爍
合格的介面庫應該做到無閃爍,要測試介面是否有閃爍,可以通過迅速拖拽架構表單邊框調整表單大小來看介面是否閃爍,這種方式相對其它方式算比較”殘酷”了,此方式還可大致看出繪製的效率:看視窗大小的改變是否明顯滯後滑鼠拖拽。還有一種方式看繪製效率:拖拽其它表單迅速經過本介面庫實現的表單上,看本介面庫實現的表單上殘留其它表單或者空白多長時間,好的實現應該幾乎看不到殘留和空白。HTControl介面庫無閃爍
(目前只有富文本編輯控制項,對其劇烈操作時存在輕微閃爍)。至於繪製效率,大家可以使用自己的方式進行測試。
五 遠離資源檔
經常聽見有些程式員說:“啊這個太簡單了,一陣兒拖拽控制項就OK了”。我的經驗和水平可能有限,說說我的看法:VC介面編程,使用資源檔拖拽控制項的方式來實現介面是一種很不好的方式,代碼的移植性很差,與資源檔綁定在一起(當然你也可以從資源檔中把本介面的資訊提取出來,控制項ID保持一致等),使用資源檔拖拽控制項的方式還有不好的地方,我也無法用文字準確說出來,可能要說很多,我相信具有豐富開發經驗的人一定有很深的體會。我現在做介面的時候是極少使用資源檔了(公司強迫的不算),一切動態建立,在代碼移植的時候只需copy語句或者整個.h,
.cpp,其它不用copy。在使用本介面庫的時候也建議動態建立一切,當然很多控制項也只能這麼做。
六 不需要附加的學習
如果您花了錢或者好不容易找到一個介面庫,但是卻不知道該怎麼使用它或者需要經過一定時間的學習才能使用,那就鬱悶了,培訓開發人員需要不小的花費,不能投入自己的產品研發還得正常給工資。這樣的介面庫不能算一個很好的介面庫(當然可能存在一切都很好,就是需要附加學習的),一些公司可能不適合使用。
本介面庫中控制項都是獨立的C++類,它們之間沒有複雜關係,注意事項也幾乎沒有,要想實現某個功能直接調用介面即可。對C++和介面編程稍有經驗的人開啟標頭檔看一下提供了哪些介面即可使用。
介面庫中控制項的訊息都保持跟預設控制項的一致,所以只要你會預設控制項的使用就會本介面庫的使用,
已經完成的類和將來開發的都爭取使用API的方式開發,這樣這些控制項就不局限於windows下的具體架構,可以在SDK,MFC,
wxWidget等等方式下使用。