• <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)論
              
            精品国产福利久久久| 久久久久亚洲精品中文字幕| 精品久久无码中文字幕| 99久久精品国产一区二区蜜芽| 国产精品久久久久久影院| 久久精品中文字幕一区| 久久久国产打桩机| 99热成人精品免费久久| 亚洲精品乱码久久久久久蜜桃图片 | 亚洲中文字幕久久精品无码APP | 欧美性大战久久久久久| 久久精品国产99久久久| 美女久久久久久| 国产精品久久久久影院色| 伊人久久大香线蕉无码麻豆| 99久久久精品| 久久精品一本到99热免费| 国产—久久香蕉国产线看观看| av色综合久久天堂av色综合在| 狠狠色伊人久久精品综合网| 久久精品国产亚洲AV大全| 亚洲一级Av无码毛片久久精品| 国产三级久久久精品麻豆三级| 少妇久久久久久被弄到高潮| 91精品国产91热久久久久福利| 久久久久亚洲av无码专区导航 | 久久精品国产亚洲AV香蕉| 国内精品人妻无码久久久影院导航| 国产精品99久久久久久猫咪 | 一本久久久久久久| 2021精品国产综合久久| 久久国产色AV免费观看| 久久久久亚洲av无码专区喷水| 亚洲人成网站999久久久综合| 国产福利电影一区二区三区久久久久成人精品综合 | 国产一久久香蕉国产线看观看| 亚洲av成人无码久久精品| 老色鬼久久亚洲AV综合| 看久久久久久a级毛片| 久久久精品人妻一区二区三区蜜桃 | 久久99精品综合国产首页|