• <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>
            隨筆-341  評(píng)論-2670  文章-0  trackbacks-0
                大家肯定還記得上次我給NativeX開(kāi)發(fā)IDE(參見(jiàn)這里這里)的事情。IDE使用C#進(jìn)行開(kāi)發(fā),然后遇到了一個(gè)瓶頸,其中的一個(gè)問(wèn)題就是GDI+渲染那么多各種顏色的文字實(shí)在是太慢了。再加上我也一直很想用C++開(kāi)發(fā)界面,但是又找不到一個(gè)可以跟WinForm或者WPF一樣既簡(jiǎn)單易用又靈活的東西,所以決定自己寫(xiě)。名字就叫GacUI好了,GPU Accelerated C++ User Interface。

                當(dāng)然這并不是我第一次開(kāi)發(fā)GUI了,開(kāi)發(fā)GUI是一個(gè)慘痛的歷史。在我還在讀高中的時(shí)候,為了做一個(gè)RPG游戲就用Delphi開(kāi)發(fā)了一套基于GDI的GUI。高三的時(shí)候升級(jí)了它。大一的時(shí)候使用OpenGL為了同樣的目的開(kāi)發(fā)了一次,大三的時(shí)候封裝了API但是發(fā)現(xiàn)API真是超級(jí)復(fù)雜結(jié)果無(wú)法封裝所有必須的功能,去年試圖抄WPF但是由于我處理得不好性能太慢失敗了。因此現(xiàn)在總結(jié)了之前開(kāi)發(fā)GUI的所有經(jīng)驗(yàn)教訓(xùn),重新開(kāi)發(fā)一套C++的GUI系統(tǒng)。

                這個(gè)系統(tǒng)的特征如下:
                1、排版靈活。現(xiàn)在Left, Top, Width, Height已經(jīng)不是控件的屬性了,轉(zhuǎn)而放在了另一個(gè)層次里面。簡(jiǎn)單來(lái)說(shuō)就是,GacUI支持在一個(gè)窗口上放很多的排版線,可以做各種復(fù)雜的排版,最后一個(gè)控件必須依附在排版線的矩形區(qū)域上面。可想而知,并不是所有的控件都是按照Left, Top, Width, Height來(lái)確定位置的。不過(guò)大家也不用害怕,只是這些屬性已經(jīng)被封裝到特定的一組對(duì)象。
                2、樣式靈活。簡(jiǎn)單來(lái)說(shuō)就是換皮膚,但是這并不像VCLSkin那樣只是重繪,這里的樣式允許你把整個(gè)控件的外觀都換掉(譬如說(shuō)跟MacOS一樣滾動(dòng)條的兩個(gè)方向按鈕都挨在一起),就跟WPF更換控件的template一樣。
                3、支持多渲染器。目前我內(nèi)置了GDI和Direct2D渲染,大家根據(jù)需要可以開(kāi)發(fā)自己的渲染器——不過(guò)我覺(jué)得一般都用不上。
                4、跨平臺(tái)。這里指的是我把CreateWindow那樣子的東西給隔離了,轉(zhuǎn)而去實(shí)現(xiàn)一個(gè)INativeWindow(包括創(chuàng)建刪除打開(kāi)繪圖設(shè)備等)。我默認(rèn)提供了一個(gè)基于CreateWindow的實(shí)現(xiàn),然后可選創(chuàng)建GDI或者Direct2D繪圖設(shè)備。哪怕是將來(lái)大家想將GUI移植到Windows8 Metro設(shè)備(因?yàn)橹苯又С諨irectX渲染,把控件的樣式改成MetroUI那種感覺(jué)就行了)、在游戲里面創(chuàng)造虛擬窗口、或者干脆放到Linux上,僅需提供一套INativeWindow并掛載Linux上的高性能繪圖設(shè)備(我知道linux上面的某些繪圖api性能巨差,應(yīng)該避免使用,個(gè)人推薦OpenGL)。
                5、渲染方便。渲染的方法是,我提供了很多預(yù)定義圖元,可以將圖元綁定到排版線上來(lái)決定其尺寸,最后每一個(gè)圖元都會(huì)有渲染器安排一個(gè)圖元渲染算法來(lái)渲染出來(lái)。如果你需要的外觀剛好可以用預(yù)定義的圖元表達(dá)的話,那可以直接拼裝。否則,開(kāi)發(fā)新的圖元即可。

                控件的邏輯、樣式、排版、渲染四套工序已經(jīng)完全隔離。舉個(gè)例子,我們都知道GroupBox和Panel除了是容器以外沒(méi)有任何區(qū)別,因此我給GuiControl類(lèi)編寫(xiě)了Win7GroupBoxStyle和Win7WindowStyle兩套樣式,使用不同的組合就可以創(chuàng)造出不同的外觀,不需要所有的東西都因?yàn)橥庥^有一點(diǎn)點(diǎn)變化就寫(xiě)成兩個(gè)控件了。因此我們可以知道,如果你需要特別的外觀,那么就寫(xiě)一個(gè)自己的Style。GacUI是開(kāi)源的(不過(guò)暫時(shí)沒(méi)有自己的項(xiàng)目首頁(yè),我把代碼放在了Vczh Library++ 3.0的Candidate\GUI\GUI\下面),因此開(kāi)發(fā)樣式的時(shí)候還可以借鑒我預(yù)定義提供的Win7外觀樣式包的代碼。

                因?yàn)闆](méi)開(kāi)發(fā)完,所以先貼個(gè)圖。下面的圖因?yàn)?#8220;可編輯文本元素”的Direct2D渲染代碼還沒(méi)寫(xiě),所以只給出GDI得結(jié)果。Direct2D因?yàn)樽詭聊蝗ヤ忼X,所以比這個(gè)要好看很多。下一個(gè)IDE我就用GacUI來(lái)開(kāi)發(fā)了,C#開(kāi)發(fā)IDE難度很高啊,膜拜Mono開(kāi)發(fā)SharpDevelop那幫人,我還是用C++就好了。



            posted on 2011-10-22 19:34 陳梓瀚(vczh) 閱讀(5079) 評(píng)論(14)  編輯 收藏 引用 所屬分類(lèi): GacUI

            評(píng)論:
            # re: GacUI項(xiàng)目正式啟動(dòng) 2011-10-22 19:40 | 飛雪
            前排表示支持。  回復(fù)  更多評(píng)論
              
            # re: GacUI項(xiàng)目正式啟動(dòng) 2011-10-22 22:22 | 邱震鈺(zblc)
            純支持  回復(fù)  更多評(píng)論
              
            # re: GacUI項(xiàng)目正式啟動(dòng) 2011-10-23 01:32 | phoenixbing
            gac 表示什么  回復(fù)  更多評(píng)論
              
            # re: GacUI項(xiàng)目正式啟動(dòng) 2011-10-23 03:26 | phoenixbing
            @phoenixbing
            ok 我知道了  回復(fù)  更多評(píng)論
              
            # re: GacUI項(xiàng)目正式啟動(dòng) 2011-10-24 07:28 | right
            浮動(dòng)的元素怎么搞,比如右鍵菜單,停靠面板,像ribbon那樣的浮動(dòng)面板  回復(fù)  更多評(píng)論
              
            # re: GacUI項(xiàng)目正式啟動(dòng)[未登錄](méi) 2011-10-24 18:14 | 姚冬
            我覺(jué)得沒(méi)必要自己再造個(gè)輪子了,可以考慮用 Qt。 c++,跨平臺(tái),自帶2d渲染引擎比GDI+快,豐富的基礎(chǔ)類(lèi)庫(kù)和算法庫(kù),天生的Java Script腳本綁定。  回復(fù)  更多評(píng)論
              
            # re: GacUI項(xiàng)目正式啟動(dòng)[未登錄](méi) 2011-10-24 18:15 | 姚冬
            對(duì)了,可以去看看新版本的 WPS和YY語(yǔ)音,都是用Qt寫(xiě)的客戶端。  回復(fù)  更多評(píng)論
              
            # re: GacUI項(xiàng)目正式啟動(dòng) 2011-10-24 19:35 | 陳梓瀚(vczh)
            @姚冬
            1:QT渲染遠(yuǎn)遠(yuǎn)沒(méi)有WPF在一臺(tái)好顯卡的電腦快,而且不能直接嵌入在游戲里。而我是考慮了這一點(diǎn)的。而且qt那種結(jié)構(gòu)還不能使用在win8的MetroUI里面,這將來(lái)會(huì)成為一個(gè)問(wèn)題——而我也考慮了這一點(diǎn)。
            2:造輪子還能用來(lái)鍛煉自己造福他人,就像明明有了那么多操作系統(tǒng)google還要折騰個(gè)android一樣。  回復(fù)  更多評(píng)論
              
            # re: GacUI項(xiàng)目正式啟動(dòng) 2011-10-25 18:09 | iloveprogramme
            支持造這個(gè)輪子,到目前都沒(méi)發(fā)現(xiàn)簡(jiǎn)潔好用的C++ UI庫(kù)。  回復(fù)  更多評(píng)論
              
            # re: GacUI項(xiàng)目正式啟動(dòng) 2011-10-26 04:39 | 裝配腦袋
            單選按鈕和復(fù)選框的效果好山寨。。  回復(fù)  更多評(píng)論
              
            # re: GacUI項(xiàng)目正式啟動(dòng) 2011-10-26 05:46 | yrj
            C++ 版 WPF  回復(fù)  更多評(píng)論
              
            # re: GacUI項(xiàng)目正式啟動(dòng) 2011-10-26 09:13 | 陳梓瀚(vczh)
            @裝配腦袋
            Direct2D版本要好看很多……  回復(fù)  更多評(píng)論
              
            # re: GacUI項(xiàng)目正式啟動(dòng) 2011-11-03 03:34 | Voyaging-Mk
            Clanlib的GUI貌似挺好,而且是3D的····有沒(méi)搗鼓過(guò)?  回復(fù)  更多評(píng)論
              
            # re: GacUI項(xiàng)目正式啟動(dòng) 2011-11-03 06:44 | 陳梓瀚(vczh)
            @Voyaging-Mk
            那個(gè)太難操作了  回復(fù)  更多評(píng)論
              
            色婷婷综合久久久久中文字幕| 久久夜色精品国产噜噜亚洲a| 狠狠色丁香久久婷婷综合蜜芽五月| 国产综合精品久久亚洲| 九九精品久久久久久噜噜| 亚洲va中文字幕无码久久| 色综合久久久久网| 久久亚洲AV无码精品色午夜麻豆| 久久精品aⅴ无码中文字字幕不卡 久久精品aⅴ无码中文字字幕重口 | 97精品伊人久久大香线蕉| 久久久久久久97| 久久se这里只有精品| 精品久久久噜噜噜久久久| 久久久国产精品| 1000部精品久久久久久久久| 久久夜色精品国产www| 久久久国产乱子伦精品作者| 综合久久给合久久狠狠狠97色| 久久久久久久久无码精品亚洲日韩| 久久久精品久久久久特色影视| 久久国产精品99久久久久久老狼| 国产精品久久久久久五月尺| 国产精品99久久不卡| 久久久久久久99精品免费观看| 97香蕉久久夜色精品国产 | 久久婷婷色综合一区二区| 国产综合久久久久久鬼色| 一级A毛片免费观看久久精品| 国产精品久久久久一区二区三区| 97精品依人久久久大香线蕉97| 天堂无码久久综合东京热| 久久精品成人免费观看97| 久久国产成人午夜aⅴ影院| 欧美久久综合性欧美| 国产91色综合久久免费分享| 久久香综合精品久久伊人| 亚洲AV无码久久精品蜜桃| 久久WWW免费人成一看片| 欧美va久久久噜噜噜久久| 无码AV波多野结衣久久| 久久国产精品一国产精品金尊|