• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            萬星星@豌豆莢 歡迎加入我們
            一個吃軟飯的男人!!!!!我只想寫程序####
            微博:http://weibo.com/wanlianwen
            posts - 172,  comments - 1253,  trackbacks - 0
             

            初衷

            一直希望VC開發(fā)者能夠方便的開發(fā)出細膩高品質(zhì)的用戶界面。我喜歡C++,選擇的平臺是Windows,所以大部分時間用VC。我自身不排斥其他技術或者開發(fā)語言或者開發(fā)工具,都去了解,了解的目的是想吸取好的思想補充VC開發(fā)方面的不足。從事界面開發(fā)方面的研究有5年了,學過很多,嘗試過很多,失敗過很多,但是沒有氣餒。感謝開源,尤其是谷歌的Chrome開源,使我再次提高。在論壇和代碼網(wǎng)站,都能看到一些界面方面作品,有源碼的也有純欣賞的,大多數(shù)一看上去還不錯,本地執(zhí)行就會發(fā)現(xiàn)粗糙的地方,不細膩,難以商業(yè)化使用。總體來講,國內(nèi)很難看到好的界面方面的開源框架,優(yōu)秀公司也以此為傲,不斷引導界面潮流,使得其他一些公司模仿起來都累得喘氣。

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

            互聯(lián)網(wǎng)客戶端的特點是小巧靈,界面本身比較絢麗,背后依賴的界面引擎很重要。谷歌傾盡所有的開源姿態(tài),是對微軟的一種挑釁,在互聯(lián)網(wǎng)方面我打敗了你,在傳統(tǒng)桌面上無法打敗,把自己優(yōu)秀的桌面代碼開源出去聯(lián)合所有人來不斷孤立你。

            Chrome開源牽扯的其他開源達30多個,幾百個工程,一般的開發(fā)者想要利用其中的部分功能需要花費一些學習時間,要有移植大項目的經(jīng)驗。這里我做的就是抽取其中的view部分,做出一個基本的開發(fā)框架,斬斷過多的牽連,盡量利用Windows平臺的sdk,希望對渴望學習開發(fā)者的或者有能力擴展的公司有用。


            背景

            界面方面的研究,經(jīng)過了三個階段:傳統(tǒng)Win32窗口、Win32窗口的子類化自繪、無窗口界面開發(fā)(directui)。這三個階段有交集,大致還是按照時間推移不斷提高的。

            第一階段:04-05年當時處于研究生實習時期,在導師公司做gis平臺開發(fā),對于界面要求不高,但也有一些定制性開發(fā),那個時期基本上就是上codeproject,學習常規(guī)窗口編程技巧,那些api能做那些事,會引起什么效果,有那些附帶作用,久而久之就知道做一個效果最直接的辦法是組合那些api。當時自繪的工作不多,但是長時間的反復調(diào)用控件會讓人厭煩,當時看了arcgis的平臺里面開始使用網(wǎng)頁做一些界面,限于當時的知識,無法獲取研究的途徑。后來我知道了一個叫BCG的界面開發(fā)庫,從它開始進入了自繪階段。

            第二階段:06-07年一開始是對BCG界面庫的研究,說起這件事,覺得泄露的代碼對我國軟件開發(fā)水平的提高有很大幫助。BCG界面庫在當時模擬的是office2003界面風格,模擬的很像但它的代碼自身并不是非常清晰,模塊的劃分不一目了然。他在當時是把開源的CJLib打垮了,不過隨后又被CJLib的商業(yè)公司Codejoke干翻,直至最后跟VC8mfc弱弱聯(lián)合,倉促間形成一個mfcx,就現(xiàn)在來看使用的公司很少。Codejokextp也是以泄漏的方式才能有機會學到,他的界面組件劃分比較合理,代碼很清晰,尤其是其中的skinframework框架,單獨拿出來編譯一個dll即可實現(xiàn)常規(guī)窗口的換膚,皮膚格式可以和xp的兼容。也是他,讓我徹底放棄常規(guī)窗口的子類化自繪的工作,轉(zhuǎn)而是研究他的實現(xiàn),因為他已經(jīng)做到極致。后來我08年的畢業(yè)設計也是以他為基礎,題目是軟件構造方面的,各種形式的界面插件構造軟件框架。在這個時候qq已經(jīng)向無窗口發(fā)展了,這時候我得到了directui的概念,開始了無窗口界面方面的研究。

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



            針對
            Chrome開源所做的工作

            Chrome開源,主要是抽取其中的view部分代碼,依賴的有他的basegfxskiaapp部分,我把base分成了basemessage_frameworkrfc_algorithmskiagdiplus替換合并到gfxapp劃分到animationview_framework,去掉linux以及mac平臺的支持部分,去掉了一些不需要的功能比如網(wǎng)頁拖拽相關,形成了一個最小的開發(fā)框架,并修改了標題欄自繪的一個bug。Base部分起初想用boost替換,后來發(fā)現(xiàn)工作量很大,還是沒敢做。截圖如下:

            所有整理代碼下載


            后續(xù)工作

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

            注:工程是2005的,額外需要的頭文件<vsstyle.h> <vssym32.h>可以從vc2008sdk中拷貝或者任意其他地方下載。2008直接轉(zhuǎn)換即可編譯。

            posted on 2011-03-20 00:24 萬連文 閱讀(32393) 評論(31)  編輯 收藏 引用 所屬分類: 小作品

            FeedBack:
            # re: 基于Chrome開源提取的界面開發(fā)框架開篇
            2011-03-20 01:18 | ballbillow
            再次看到你寫界面方面的技術文章,很期待哈,
            讓我想到了自己剛開始工作那會學習界面的情景,雖然每一步都沒有你研究都那么深入,現(xiàn)在也完全不做GUI方面的事情了,但是對GUI一直有一種情結,呵呵
            以前經(jīng)常和你聊天的,學習到不少東西,現(xiàn)在怎么QQ上沒有你了,奇怪  回復  更多評論
              
            # re: 基于Chrome開源提取的界面開發(fā)框架開篇
            2011-03-20 01:28 | ouyang
            不錯啊,繼續(xù)寫下去
            看過你前面的文章,感覺你真是挺能鉆研的。最后說的也不錯,其實很多開源或者泄露出來的代碼里面有非常多的好東西,就看你有沒有靜心下來研究了。  回復  更多評論
              
            # re: 基于Chrome開源提取的界面開發(fā)框架開篇
            2011-03-20 10:12 | ccsdu2009
            牛人就是這樣煉成的!  回復  更多評論
              
            # re: 基于Chrome開源提取的界面開發(fā)框架開篇
            2011-03-20 10:21 | liquanhai
            很高興能看到樓主發(fā)表這么好的文章,我一直在用VC6,大家說是windows98風格的,呵呵,想研究一下QT,也沒有時間  回復  更多評論
              
            # re: 基于Chrome開源提取的界面開發(fā)框架開篇
            2011-03-20 14:45 | null
            不錯,可以搞個開源項目。  回復  更多評論
              
            # re: 基于Chrome開源提取的界面開發(fā)框架開篇[未登錄]
            2011-03-20 15:58 | Lucifer
            頂  回復  更多評論
              
            # re: 基于Chrome開源提取的界面開發(fā)框架開篇
            2011-03-21 09:59 | boboman
            實現(xiàn)DirectUI,可以參考upp的方法。  回復  更多評論
              
            # re: 基于Chrome開源提取的界面開發(fā)框架開篇[未登錄]
            2011-03-21 12:22 | Jcily
            頂你。關注

            樓主很久沒有寫博了。  回復  更多評論
              
            # re: 基于Chrome開源提取的界面開發(fā)框架開篇[未登錄]
            2011-03-21 14:39 | avlee
            這個主意不錯,什么想法導致使用gdiplus代替skia呢?  回復  更多評論
              
            # re: 基于Chrome開源提取的界面開發(fā)框架開篇
            2011-03-21 14:44 | 萬連文
            因為skia的代碼有好幾M,比起之外所有的代碼總量還要大幾倍,僅僅是因為這個原因。當然,我在接口層面還是盡量維持,以防有人替換回去。skia不錯,作為安卓的底層圖形引擎,授權方式不是BSD的。gdiplus的很多概念以及編程接口都和skia一致。  回復  更多評論
              
            # re: 基于Chrome開源提取的界面開發(fā)框架開篇[未登錄]
            2011-03-21 17:31 | Ken
            樓主很能堅持,贊

            我也曾經(jīng)妄想重用ie5的泄漏代碼,但是看了數(shù)個星期后放棄了。呵呵

            我對界面方面的經(jīng)歷和樓主很相似,只不過在知道 DirectUI 后,轉(zhuǎn)到一個跨平臺的Windowless UI 的開源實現(xiàn) http://upp.sf.net,我們成功應用并開發(fā)了2個商業(yè)軟件

            其內(nèi)有圖文混排等類似HTML功能實現(xiàn),較為穩(wěn)定

            關鍵其編程思想很有創(chuàng)意:嵌入png資源, Layout 實現(xiàn)方式等
            當然其代碼量在40W行的規(guī)模上,其作者是一群很低調(diào)、很老的人。
              回復  更多評論
              
            # re: 基于Chrome開源提取的界面開發(fā)框架開篇
            2011-03-21 18:46 | avatasia
            @Ken
            剛研究了ksafe的代碼,chromium的一年前也研究過。
            gdiplus的東西,如果開發(fā)輕巧的東西,用這個感覺不太好,部署起來又多了個dll。

            關于圖文并排,ksafe的xml里較弱化的實現(xiàn)了這個功能,如果復雜點,需要引入richedit控件,還是與directUI的思想有點偏差。

            豆瓣的電臺 用了這么一套框架,OneRing + QT
            http://code.google.com/p/onering-desktop/
            我還沒時間去研究,感興趣的話,期待你的評價。  回復  更多評論
              
            # re: 基于Chrome開源提取的界面開發(fā)框架開篇
            2011-03-21 18:57 | 萬連文
            @avatasia
            也可以集成WebBrowser來實現(xiàn),我這邊做了一個電臺就是采取這種辦法。當然,我還是想能多一些native的開發(fā)能力,多一些技術選擇。集成flash或者網(wǎng)頁,也是不錯的方案。  回復  更多評論
              
            # re: 基于Chrome開源提取的界面開發(fā)框架開篇
            2011-03-22 11:35 | 小不點
            牛逼! 無窗口界面開發(fā),是不是類似于大多數(shù)游戲中的界面,幾乎與HWND這些無關了,自己繪制,自己處理消息??  回復  更多評論
              
            # re: 基于Chrome開源提取的界面開發(fā)框架開篇
            2011-03-22 17:13 | 小程
            不錯,在Google reader里看到這篇文章,挺感興趣的,雖然主業(yè)不做UI開發(fā),但是曾經(jīng)做過,目前也在用QT,就來關注一下,加油,期待后續(xù)!  回復  更多評論
              
            # re: 基于Chrome開源提取的界面開發(fā)框架開篇
            2011-03-28 19:47 | Iron
            堅持做一件事,不斷追求,做到極致,樓主真人才也~~~  回復  更多評論
              
            # re: 基于Chrome開源提取的界面開發(fā)框架開篇
            2011-03-29 15:21 | 甘草
            頂!我從CSDN過來的。  回復  更多評論
              
            # re: 基于Chrome開源提取的界面開發(fā)框架開篇
            2011-04-10 00:04 | 游戲桔子
            我也做UI,3-4年了。也研究過chrome的代碼過。做了一個簡單的無窗口widget界面框架。不過沒樓主哪樣把整個給摳出來了。喜歡研究各式各樣的代碼。有收藏癖好。。  回復  更多評論
              
            # re: 基于Chrome開源提取的界面開發(fā)框架開篇
            2011-06-01 10:17 | 李現(xiàn)民
            兄弟你是完美的吧? 這個框架我在內(nèi)部bbs上見過, 但rtx上怎么沒有你的名字呢?  回復  更多評論
              
            # re: 基于Chrome開源提取的界面開發(fā)框架開篇[未登錄]
            2011-06-01 13:12 | 萬連文
            @李現(xiàn)民
            五月初我辭職了  回復  更多評論
              
            # re: 基于Chrome開源提取的界面開發(fā)框架開篇
            2011-06-02 09:43 | 李現(xiàn)民
            @萬連文
            哈哈, 現(xiàn)在哪高就呢?  回復  更多評論
              
            # re: 基于Chrome開源提取的界面開發(fā)框架開篇
            2011-12-27 15:32 | 開心日記
            博主 很是佩服你的能力,我已經(jīng)認真看了你寫的經(jīng)驗積累,也下載了你的作品,要好好學習,呵呵,thank you  回復  更多評論
              
            # re: 基于Chrome開源提取的界面開發(fā)框架開篇
            2012-01-01 17:15 | 貝殼
            1>------ 已啟動生成: 項目: gfx, 配置: Debug Win32 ------
            2>------ 已啟動生成: 項目: view_framework, 配置: Debug Win32 ------
            1>正在編譯...
            2>正在編譯...
            1>native_theme_win.cpp
            2>dialog_client_view.cpp
            2>正在編譯...
            1>正在創(chuàng)建庫...
            2>default_theme_provider.cpp
            1>生成日志保存在“file://c:\Users\Will\Desktop\QVMKiller\gfx\Debug\BuildLog.htm”
            1>gfx - 0 個錯誤,0 個警告
            3>------ 已啟動生成: 項目: test_base, 配置: Debug Win32 ------
            3>正在鏈接...
            2>正在編譯...
            2>drop_helper.cpp
            2>正在編譯...
            2>native_view_host_win.cpp
            3>正在嵌入清單...
            2>正在編譯...
            2>native_view_host.cpp
            2>正在創(chuàng)建庫...
            3>生成日志保存在“file://c:\Users\Will\Desktop\QVMKiller\test_base\Debug\BuildLog.htm”
            3>test_base - 0 個錯誤,0 個警告
            4>------ 已啟動生成: 項目: test_view, 配置: Debug Win32 ------
            4>正在鏈接...
            4>LINK : fatal error LNK1104: cannot open file '../lib\lib_view_framework-vc80-mt-sd.lib'
            4>生成日志保存在“file://c:\Users\Will\Desktop\QVMKiller\test_view\Debug\BuildLog.htm”
            4>test_view - 1 個錯誤,0 個警告
            2>生成日志保存在“file://c:\Users\Will\Desktop\QVMKiller\view_framework\Debug\BuildLog.htm”
            2>view_framework - 0 個錯誤,0 個警告
            ========== 生成: 3 已成功, 1 已失敗, 4 最新, 0 已跳過 ==========
              回復  更多評論
              
            # re: 基于Chrome開源提取的界面開發(fā)框架開篇
            2012-10-11 12:13 | Demon
            請問萬兄,xframework是基于哪個版本的chrome ?
            我想去下一個, 然后比照學習, 謝謝.
              回復  更多評論
              
            # re: 基于Chrome開源提取的界面開發(fā)框架開篇
            2012-10-11 15:16 | 萬連文
            @Demon
            這個版本很老了,我自己也記不住,當初最遺憾的就是沒有前瞻性,保持跟蹤,不過那樣又會源碼很大不便于學習,有利有弊。如果你一時無法接受Chromium那么大工程,可以看xframework好了,小而干凈,學習起來更容易掌握。  回復  更多評論
              
            # re: 基于Chrome開源提取的界面開發(fā)框架開篇
            2012-10-11 20:58 | Demon
            @萬連文
            嗯,我喜歡小工程.今天下了一個最新的版本(太大了,壓縮包1.8G,展開接近6G),然后又下了一個最早的版本,revision標號1.0.154. 不過大的小的都是一頭霧水.

            xframework的確是小而干凈的好東西, 方便上手. 今天發(fā)現(xiàn) examples/chrome 運行有個bug, 就是點 tab上的紅叉后, 屏幕沒有變化. 如果被關的是當前focus,則立即空指針崩潰. 看了一下午,沒找到原因.  回復  更多評論
              
            # re: 基于Chrome開源提取的界面開發(fā)框架開篇
            2012-10-11 21:42 | 萬連文
            @Demon
            那個工程剝離出來的不完整,僅僅用于學習參考,我也沒有繼續(xù)維護。  回復  更多評論
              
            # re: 基于Chrome開源提取的界面開發(fā)框架開篇
            2013-07-11 16:10 | hikaruxx
            你好,請問豌豆莢的界面是不是也是基于x-framework,還是基于最新的chromium??  回復  更多評論
              
            # re: 基于Chrome開源提取的界面開發(fā)框架開篇[未登錄]
            2013-08-09 14:15 | Brent
            一直在疑惑迅雷等軟件的界面開發(fā)方法。謝謝你的博客,讓我了解到了這一些GUI開發(fā)知識。  回復  更多評論
              
            # re: 基于Chrome開源提取的界面開發(fā)框架開篇
            2014-09-27 11:17 | 余上
            樓主,你是自己實現(xiàn)了NativeWidgetPrivate接口嗎?  回復  更多評論
              
            # re: 基于Chrome開源提取的界面開發(fā)框架開篇
            2014-09-27 11:24 | 余上
            看了一下您的代碼,貌似
            https://code.google.com/p/x-framework/source/browse/trunk/library/view/widget/native_widget_win.h
            是chromium庫中的文件吧。記得這個文件在以前的chromium代碼中是有的,貌似目前最新的chromium代碼中已經(jīng)沒有這個文件了。  回復  更多評論
              
            簡歷下載
            聯(lián)系我

            <2015年10月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            常用鏈接

            留言簿(66)

            隨筆分類

            隨筆檔案

            相冊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            亚洲中文久久精品无码| 日韩久久无码免费毛片软件| 亚洲国产综合久久天堂| 国产综合精品久久亚洲| 99热成人精品免费久久| 国产AⅤ精品一区二区三区久久| 国产精品久久永久免费| 久久免费视频网站| 久久97久久97精品免视看| 日韩亚洲国产综合久久久| 日韩精品久久久久久久电影| 国产免费久久精品99re丫y| 久久久久久精品免费免费自慰| 狠狠综合久久AV一区二区三区| 一本久久a久久精品亚洲| 国产亚洲精品自在久久| 国产高潮国产高潮久久久91| 久久亚洲AV无码西西人体| 伊人色综合久久天天网| 久久精品夜夜夜夜夜久久| 伊人久久免费视频| 精品国产日韩久久亚洲| 久久婷婷激情综合色综合俺也去 | 欧美亚洲国产精品久久蜜芽| 国产免费久久久久久无码| 亚洲日韩欧美一区久久久久我| 亚洲午夜久久久久久久久久| 久久精品国产亚洲av麻豆小说| 久久99精品久久久久久不卡| 久久亚洲精品国产亚洲老地址 | 精品少妇人妻av无码久久| 久久精品国产亚洲一区二区| 久久久久这里只有精品| 久久久久久无码Av成人影院| 精品欧美一区二区三区久久久| 亚洲乱码日产精品a级毛片久久| 久久精品水蜜桃av综合天堂| 久久精品成人| 久久精品国产99国产精偷| 精品国产青草久久久久福利| 久久精品国产久精国产|