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

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

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

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

                因為沒開發(fā)完,所以先貼個圖。下面的圖因為“可編輯文本元素”的Direct2D渲染代碼還沒寫,所以只給出GDI得結(jié)果。Direct2D因為自帶全屏幕去鋸齒,所以比這個要好看很多。下一個IDE我就用GacUI來開發(fā)了,C#開發(fā)IDE難度很高啊,膜拜Mono開發(fā)SharpDevelop那幫人,我還是用C++就好了。



            posted on 2011-10-22 19:34 陳梓瀚(vczh) 閱讀(5080) 評論(14)  編輯 收藏 引用 所屬分類: GacUI

            評論:
            # re: GacUI項目正式啟動 2011-10-22 19:40 | 飛雪
            前排表示支持。  回復  更多評論
              
            # re: GacUI項目正式啟動 2011-10-22 22:22 | 邱震鈺(zblc)
            純支持  回復  更多評論
              
            # re: GacUI項目正式啟動 2011-10-23 01:32 | phoenixbing
            gac 表示什么  回復  更多評論
              
            # re: GacUI項目正式啟動 2011-10-23 03:26 | phoenixbing
            @phoenixbing
            ok 我知道了  回復  更多評論
              
            # re: GacUI項目正式啟動 2011-10-24 07:28 | right
            浮動的元素怎么搞,比如右鍵菜單,停靠面板,像ribbon那樣的浮動面板  回復  更多評論
              
            # re: GacUI項目正式啟動[未登錄] 2011-10-24 18:14 | 姚冬
            我覺得沒必要自己再造個輪子了,可以考慮用 Qt。 c++,跨平臺,自帶2d渲染引擎比GDI+快,豐富的基礎類庫和算法庫,天生的Java Script腳本綁定。  回復  更多評論
              
            # re: GacUI項目正式啟動[未登錄] 2011-10-24 18:15 | 姚冬
            對了,可以去看看新版本的 WPS和YY語音,都是用Qt寫的客戶端。  回復  更多評論
              
            # re: GacUI項目正式啟動 2011-10-24 19:35 | 陳梓瀚(vczh)
            @姚冬
            1:QT渲染遠遠沒有WPF在一臺好顯卡的電腦快,而且不能直接嵌入在游戲里。而我是考慮了這一點的。而且qt那種結(jié)構(gòu)還不能使用在win8的MetroUI里面,這將來會成為一個問題——而我也考慮了這一點。
            2:造輪子還能用來鍛煉自己造福他人,就像明明有了那么多操作系統(tǒng)google還要折騰個android一樣。  回復  更多評論
              
            # re: GacUI項目正式啟動 2011-10-25 18:09 | iloveprogramme
            支持造這個輪子,到目前都沒發(fā)現(xiàn)簡潔好用的C++ UI庫。  回復  更多評論
              
            # re: GacUI項目正式啟動 2011-10-26 04:39 | 裝配腦袋
            單選按鈕和復選框的效果好山寨。。  回復  更多評論
              
            # re: GacUI項目正式啟動 2011-10-26 05:46 | yrj
            C++ 版 WPF  回復  更多評論
              
            # re: GacUI項目正式啟動 2011-10-26 09:13 | 陳梓瀚(vczh)
            @裝配腦袋
            Direct2D版本要好看很多……  回復  更多評論
              
            # re: GacUI項目正式啟動 2011-11-03 03:34 | Voyaging-Mk
            Clanlib的GUI貌似挺好,而且是3D的····有沒搗鼓過?  回復  更多評論
              
            # re: GacUI項目正式啟動 2011-11-03 06:44 | 陳梓瀚(vczh)
            @Voyaging-Mk
            那個太難操作了  回復  更多評論
              
            精品熟女少妇AV免费久久| 久久精品国产99久久香蕉| 久久久久久国产精品无码下载| 亚洲性久久久影院| 久久AV高清无码| 久久综合伊人77777麻豆| 精品无码久久久久国产动漫3d| 99久久99久久久精品齐齐| 日本精品一区二区久久久| 久久棈精品久久久久久噜噜| 久久se精品一区精品二区国产| 色综合久久天天综线观看| 久久99国产综合精品免费| 三级片免费观看久久| 色噜噜狠狠先锋影音久久| 中文精品久久久久人妻不卡| 国内精品久久久久久久涩爱| 久久精品九九亚洲精品| 国产成人精品久久| 久久人人爽人人精品视频| 久久夜色tv网站| 精品久久久久久无码专区| 蜜桃麻豆WWW久久囤产精品| 久久伊人五月天论坛| 国产精品免费久久| 国产福利电影一区二区三区久久久久成人精品综合| 久久亚洲精品无码aⅴ大香| 欧美亚洲另类久久综合婷婷| 久久高潮一级毛片免费| 精品久久久久久国产免费了| 日本精品久久久久中文字幕8 | 久久av高潮av无码av喷吹| 国产精品美女久久久久久2018| 国产亚洲精久久久久久无码77777| 久久久久这里只有精品 | 麻豆精品久久久一区二区| 久久久久久毛片免费播放| 亚洲狠狠婷婷综合久久蜜芽| 囯产精品久久久久久久久蜜桃| 精品久久久中文字幕人妻| 久久国产精品成人片免费|