基於Chrome開源提取的介面開發框架開篇

2021-05-24 14:45:41 字數 2816 閱讀 8218

一直希望vc開發者能夠方便的開發出細膩高品質的使用者介面。我喜歡c++,選擇的平台是windows,所以大部分時間用vc。我自身不排斥其他技術或者開發語言或者開發工具,都去了解,了解的目的是想吸取好的思想補充vc開發方面的不足。從事介面開發方面的研究有5年了,學過很多,嘗試過很多,失敗過很多,但是沒有氣餒。感謝開源,尤其是谷歌的chrome開源,使我再次提高。在論壇和****,都能看到一些介面方面作品,有原始碼的也有純欣賞的,大多數一看上去還不錯,本地執行就會發現粗糙的地方,不細膩,難以商業化使用。總體來講,國內很難看到好的介面方面的開源框架,優秀公司也以此為傲,不斷引導介面潮流,使得其他一些公司模仿起來都累得喘氣。

介面開發跟所有其他開發一樣,都是有技術含量的,對於真正研究的人來說應該清楚。我在初期也遇到有人問我:xp換膚不是挺好嘛?vista都出來了,還需要換膚嘛?win7很漂亮,完全不需要額外的介面開發呀?我想一直介面代表了乙個企業的標識文化,比如qq的藍色以及企鵝,迅雷的動態效果視窗和蜂鳥。有興趣研究沒錯,能做好更難得。

網際網路客戶端的特點是小巧靈,介面本身比較絢麗,背後依賴的介面引擎很重要。谷歌傾盡所有的開源姿態,是對微軟的一種挑釁,在網際網路方面我打敗了你,在傳統桌面上無法打敗,把自己優秀的桌面**開源出去聯合所有人來不斷孤立你。

chrome開源牽扯的其他開源達30多個,幾百個工程,一般的開發者想要利用其中的部分功能需要花費一些學習時間,要有移植大專案的經驗。這裡我做的就是抽取其中的view部分,做出乙個基本的開發框架,斬斷過多的牽連,盡量利用windows平台的sdk,希望對渴望學習開發者的或者有能力擴充套件的公司有用。

介面方面的研究,經過了三個階段:傳統win32視窗、win32視窗的子類化自繪、無視窗介面開發(directui)。這三個階段有交集,大致還是按照時間推移不斷提高的。

第一階段:04-05年當時處於研究生實習時期,在導師公司做gis平台開發,對於介面要求不高,但也有一些定製性開發,那個時期基本上就是上codeproject,學習常規視窗程式設計技巧,那些api能做那些事,會引起什麼效果,有那些附帶作用,久而久之就知道做乙個效果最直接的辦法是組合那些api。當時自繪的工作不多,但是長時間的反覆呼叫控制項會讓人厭煩,當時看了arcgis的平台裡面開始使用網頁做一些介面,限於當時的知識,無法獲取研究的途徑。後來我知道了乙個叫bcg的介面開發庫,從它開始進入了自繪階段。

第二階段:06-07年一開始是對bcg介面庫的研究,說起這件事,覺得洩露的**對我國軟體開發水平的提高有很大幫助。bcg介面庫在當時模擬的是office2003介面風格,模擬的很像但它的**自身並不是非常清晰,模組的劃分不一目了然。他在當時是把開源的cjlib打垮了,不過隨後又被cjlib的商業公司codejoke幹翻,直至最後跟vc8的mfc弱弱聯合,倉促間形成乙個mfcx,就現在來看使用的公司很少。codejoke的xtp也是以洩漏的方式才能有機會學到,他的介面元件劃分比較合理,**很清晰,尤其是其中的skinframework框架,單獨拿出來編譯乙個dll即可實現常規視窗的換膚,**格式可以和xp的相容。也是他,讓我徹底放棄常規視窗的子類化自繪的工作,轉而是研究他的實現,因為他已經做到極致。後來我08年的畢業設計也是以他為基礎,題目是軟體構造方面的,各種形式的介面外掛程式構造軟體框架。在這個時候qq已經向無視窗發展了,這時候我得到了directui的概念,開始了無視窗介面方面的研究。

第三階段:07-現在。最開始是研究http://www.viksoe.dk/code/windowless1.htm這個開源,相信很多人都知道也研究過。他抽象了一些無視窗的介面元素,翻譯常規視窗訊息解釋並重新派發給無視窗元素,引入了一些ddraw特效,當時能接觸到這樣的**很興奮,介面初看起來很震撼,尤其是主介面的動畫效果。他也有很明顯的缺點:不支援unicode,pretytext的計算有問題,本地視窗跟無視窗的布局混合會遮蓋。基於他,我做出了自己的第乙個介面框架,並應用在公司商業化產品中,可以從這裡欣賞:http://www.cppblog.com/wlwlxj/archive/2007/08/28/31014.html。由於他對windows的封裝和無視窗元素的抽象並不是很強大,所以想要真正的用它做很強大的介面框架有困難,後來看qq、迅雷的介面,感覺到之前的介面元素並不通用,且缺少動態的能力,有一些想法在這個帖中提及:http://hi.baidu.com/wlwel/blog/item/ad08bfc8108ff78dc9176808.html。我後來想自己可能需要的是網頁那種動態能力的介面,對圖形影象的處理,以及介面的動態布局拖拽,我想起手裡的win2000洩漏**,於是乎開始了一件瘋狂的事情:移植其中的ie部分**,只要其中的介面引擎,帶上css和濾鏡,支援各種互動事件,這就是我當時的想法。歷時8個月,出來的成果:http://www.cppblog.com/wlwlxj/archive/2009/06/28/88695.html。這一次失敗了,沒法商業化應用,有很多問題,按鈕的焦點有1畫素偏差,css由於那個ie版本比較低,非常有限且不規範,濾鏡由於乙個元件建立不成功且無**沒法使用。整理的**有30多兆,**本身結構不清晰,砍掉的地方也非常多且很亂,最終我也沒有能力去繼續修改。中間有很多次的放棄,又不服氣繼續,最終走了下來。這一次研究對我最大的幫助就是在乙個巨大的軟體**中,如何找到自己想要的東西,如何大刀闊斧的砍**。裡面就像大觀園,技術很全,學到的東西太多太多。後來我意識到網頁有網頁布局的特點,桌面軟體有桌面軟體的特點,需要的地方互操作即可。接下來,我又研究了幾個月comctl32部分,最後發現研究edit button需要走到ntuser部分,甚至想要朝顯示卡驅動呼叫方面走,就打住了,當然也有一些成果:http://www.cnblogs.com/wlwel/archive/2010/05/10/1732160.html,是乙個失敗的研究,但是學到了很多東西。有段時間我甚至刻意的躲避介面開發,直到後來接觸到chrome瀏覽器,看了他的開源。

繼續增加控制項、功能、修改現有**中的一些注釋的問題。接受所有的批評和建議,但不要人身攻擊。希望能看到更多其他人的作品,現在的開源世界太豐富,很多東西不是接觸不到,而是肯不肯靜下心來研究。

基於Chrome開源提取的介面開發框架 二

基於chrome開源提取的介面開發框架 二 前段時間的工作 1.2d繪圖引擎遷移回skia平台 2.跟進到chrome原始碼的chromium.r78515版本 3.scrollview menu等ui元素移植 4.修改chrome的一些bugs或不足 5.目錄的整理 調整 6.開始以教程的形式深入...

基於Chrome開源提取的介面開發框架 三 1

近期開發計畫 1.無視窗的richedit支援,包括ole以及段落支援,這些是im類必需的元件 已經開始 預計6月初完成 2.瀏覽器類元件支援,預計包括webbrowser和webkit,後者近來的需求越來越大,儘管有挑戰也要試一試,到時候參考qt 預計6月底完成 3.flash視窗的支援,這個可能...

Chrome大戰Firefox,開源的勝利

看今天的it新聞,比較引人關注的是chrome市場份額首超firefox的訊息,說實話,我有點吃驚。可能是自己近年來忙於和技術不沾邊的事情,對chrome還停留在精簡,快速但功能還不完善的小軟體的印象上。firefox仍然是我使用的主力,看到訊息後,專門安裝chrome試了一下,可以說士別三日當刮目...