• <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
                (2011.12.5再次更新) 經(jīng)過了兩個星期的開發(fā),GacUI添加了TabControl和ListView的一部分視圖。這次的ListView的設計的目標是要跟win7的資源管理器相似,TabControl也是依照win7的本地樣式設計的。代碼仍然保存在Vczh Library++3.0(Candidate\GUI\GuiDemo\GuiDemo.sln)里,看圖:





                Direct2D的對于文字的高級渲染效果還沒有實現(xiàn),除此之外,List、Detail、Tile和Information也還沒有做。ListView有兩個模式,一個是跟普通的ListView一樣可以自行添加ListViewItem的,另一個是virtual list模式,需要自己實現(xiàn)一個支持IListViewItemView的GuiListControl::IItemProvider,然后使用ListView的那六個ContentProvider,就可以做出跟ListView一樣的效果,但是性能巨快無比的列表了。因為添加的ListViewItem很多的話,性能的瓶頸會在添加到列表的過程中,而ListView本身絲毫沒有區(qū)別。因此內(nèi)容太多的話建議使用virtual list模式,好處是不需要每一個項目都new一個對象,ListView會用一個item index來回調(diào)出具體的數(shù)據(jù)內(nèi)容。

                根據(jù)上一篇文章的評論,我決定以后發(fā)布GacUI的時候同時提供dll和一對h/cpp兩種選項,其中h/cpp會根據(jù)功能提供幾個裁剪的結(jié)果,而dll總是包含所有功能。使用dll的話,可以做到跟C#的WinForm和WPF一樣,把應用程序的插件寫在另一個dll里面。而h/cpp因為合并的文件太大,因此需要打開Visual C++的/bigobj選項,好處是可以深入使用到內(nèi)部的所有功能,還能根據(jù)自己的需要進行修改,而不局限于dll所提供的GUI部分。

                為了配合GacUI的使用,跟QT的QML一樣,我會升級以前開發(fā)的FreeScript2.0,做出一個3.0的版本來跟GacUI配合使用(這個功能是可選的,裁剪的h/cpp文件對將不強制包含腳本代碼,但是dll總是包含腳本功能)。關鍵的功能是直接支持json(合法的json數(shù)據(jù)即合法的FreeScript3.0代碼),容易使用的異步IO功能,還有跟linq一樣好用的list comprehension,最后當然是跟javascript的語法想當接近但是直接支持class,不會跟javascript一樣曲線救國。相信學習起來的難度非常小。這樣就可以把一部分用C++寫起來比較麻煩的代碼用FreeScript3.0實現(xiàn),并且這部分代碼將可以在GacUI Editor內(nèi)部編輯。GacUI會跟WPF一樣提供兩種調(diào)用方法,一種是C++自己new那些類,另一種就是使用GacUI Editor產(chǎn)生的xml了。我會盡量讓xml方法簡單易用,就跟XAML一樣,不過因為我的對象模型顯然沒有XAML(主要是C#)那么復雜,相比會比XAML容易閱讀和使用。

            =============================
            P.S. 經(jīng)過若干天的艱苦奮斗終于完成了三個View和DirectX的支持,就剩下Detail一種最復雜的View了。放圖:









            posted on 2011-12-03 07:09 陳梓瀚(vczh) 閱讀(3638) 評論(27)  編輯 收藏 引用 所屬分類: GacUI

            評論:
            # re: GacUI完成TabControl和ListView的一部分視圖 2011-12-03 07:35 | lwch
            Orz....  回復  更多評論
              
            # re: GacUI完成TabControl和ListView的一部分視圖 2011-12-03 07:44 | 陳梓瀚(vczh)
            @lwch
            真快啊,你是不是訂閱了……  回復  更多評論
              
            # re: GacUI完成TabControl和ListView的一部分視圖 2011-12-03 11:07 | ooseven
            @陳梓瀚(vczh)
            你的這個gui庫不是讓c++調(diào)用的,而是讓你的FreeScript調(diào)用的?  回復  更多評論
              
            # re: GacUI完成TabControl和ListView的一部分視圖 2011-12-03 15:34 | 空明流轉(zhuǎn)
            orz。。。  回復  更多評論
              
            # re: GacUI完成TabControl和ListView的一部分視圖 2011-12-03 15:35 | 空明流轉(zhuǎn)
            @ooseven
            是C++的,free script更多是承擔定制的作用。。。  回復  更多評論
              
            # re: GacUI完成TabControl和ListView的一部分視圖 2011-12-03 18:56 | ooseven
            例子竟然只有vc2010的工程,老大,要考慮一些廣大vc2008的開發(fā)者吧。vc2010至少目前在中國還只能玩玩而已,無法用它來開發(fā)商業(yè)軟件,因為
            在它下面開發(fā)的程序無法在winxp sp3以下的版本運行,就條限制完全不符合中國的國情,因此,對中國來說,vc2008已經(jīng)是到頭了。建議增加vc2008的sln文件  回復  更多評論
              
            # re: GacUI完成TabControl和ListView的一部分視圖 2011-12-03 19:56 | 陳梓瀚(vczh)
            @ooseven
            都行,C++是少不了的  回復  更多評論
              
            # re: GacUI完成TabControl和ListView的一部分視圖 2011-12-03 19:57 | 陳梓瀚(vczh)
            @ooseven
            現(xiàn)在這個工程只是我開發(fā)用的,跟release的sample程序還是不一樣的,以后會有的。不過xp sp3的問題,你可以通過在vs里面把編譯器10版本降低到9版本來產(chǎn)生跟2008一樣的效果,雖然代價就是沒有C++0x,而且2010修掉的bug在9版本的編譯器上不起作用。  回復  更多評論
              
            # re: GacUI完成TabControl和ListView的一部分視圖 2011-12-04 06:17 | zjh
            可以看看這篇文章 靜態(tài)鏈接C庫http://blog.vckbase.com/BastEt/archive/2010/07/20/50718.html@ooseven
              回復  更多評論
              
            # re: GacUI完成TabControl和ListView的一部分視圖 2011-12-04 07:02 | 陳梓瀚(vczh)
            # re: GacUI完成TabControl和ListView的一部分視圖 2011-12-04 07:05 | 陳梓瀚(vczh)
            @zjh
            第一次見到有人說dll check manifest,secure stl不好。真是的,軟件出了問題就應該直接崩潰,這樣程序員才能立刻調(diào)試,不然自己寫出來的程序里面亂成一團糟都不知道。然后自己的代碼就依賴了舊編譯器的bug,結(jié)果新編譯器把bug修了,就怪新編譯器了。  回復  更多評論
              
            # re: GacUI完成TabControl和ListView的一部分視圖 2011-12-04 07:54 | zjh
            @陳梓瀚(vczh)
            我也不贊成他后面的話,但是,是不是編譯器的bug,說不好,更可能是編譯器的增強,標準c c++好像沒有規(guī)定  回復  更多評論
              
            # re: GacUI完成TabControl和ListView的一部分視圖 2011-12-04 09:16 | 陳梓瀚(vczh)
            @zjh
            當然這個bug的定義不太嚴格。舉個例子,VC6的for(int i=xxx)的i作用域可以到for后面。當時的C++還沒標準也就罷了,不過從今天的眼光看來這種定義是錯誤的。我把這種東西稱為bug。有些人喜歡這么寫,等到新編譯器(記得是2003開始的)做得更標準了,他的反應就跟那個博主一樣了。  回復  更多評論
              
            # re: GacUI完成TabControl和ListView的一部分視圖 2011-12-04 17:07 | ooseven
            @ooseven
            vc2008的編譯器披上vs2010的馬甲,這樣做意義不大吧,基本上沒有人會這樣折騰。  回復  更多評論
              
            # re: GacUI完成TabControl和ListView的一部分視圖 2011-12-04 19:36 | 空明流轉(zhuǎn)
            @ooseven
            @陳梓瀚(vczh)
            我都不懂你們在討論什么。你要2008的工程自己去export一個不就可以了么?  回復  更多評論
              
            # re: GacUI完成TabControl和ListView的一部分視圖 2011-12-04 21:05 | 陳梓瀚(vczh)
            @空明流轉(zhuǎn)
            export太高級了,對于那些沒裝vs2010的人來說……  回復  更多評論
              
            # re: GacUI完成TabControl和ListView的一部分視圖 2011-12-05 00:07 | ooseven
            @空明流轉(zhuǎn)
            要解決是都很簡單,問題是我只想看看demo而已。如果太折騰嚴重打擊看demo的積極性。  回復  更多評論
              
            # re: GacUI完成TabControl和ListView的一部分視圖 2011-12-05 00:10 | ooseven
            @陳梓瀚(vczh)

            嗯,既然我暫時看不了,就在這里先問下,對于UI框架我其實不是很在乎例子里的效果票不漂亮,我在乎的是這個UI框架方不方便用戶定制?比如自繪,比如方便的繼承。這方面我很佩服xtremetoolkit,他的框架很perfect。在上面定制自己的控件真是信手拈來。
              回復  更多評論
              
            # re: GacUI完成TabControl和ListView的一部分視圖 2011-12-05 02:07 | 陳梓瀚(vczh)
            @ooseven
            我使用了WPF的模式,而且允許用戶自定義renderer(譬如GDI和DirectX和Opengl等),不過一般不需要。

            所以所謂的自繪就是給一個控件(譬如說GuiX)寫一個類繼承自Guix::IStyleController,這就是他的皮膚。然后,在里面你要創(chuàng)建各種圖元的對象,然后對他們進行排版。絕大多數(shù)排版我都提供了相應的算法,因此基本上你不需要動態(tài)計算一些對象的尺寸,配置一下他們?nèi)绾位ハ嘤绊懢涂梢粤恕?

            這跟GDI時代的DrawXXX不一樣了,變成了類似于CreateRectangle(...)之類的操作。IStyleController還可以回調(diào),你可以在這里修改圖元的結(jié)構(gòu)和屬性(顏色等)。當然,你也可以繼承自已有的皮膚,然后寫一點小代碼去修改他們?,F(xiàn)在我內(nèi)置了一套win7的皮膚,以后有時間還會做更多。當前的demo每創(chuàng)建一個控件都要制定一個皮膚對象,但是以后我會開發(fā)一套簡單的“缺省皮膚獲取機制”來簡化這個操作,并且允許你批量修改控件的外觀,免去繁瑣的制定操作,也為GacUI Editor打下基礎。

            至于靈活性的問題,其實現(xiàn)在這個框架有很多控件的組成部分都是一個真的按鈕,然后通過控件的皮膚給這些子按鈕設置了不同的按鈕皮膚對象來構(gòu)成現(xiàn)在多樣化的表現(xiàn)形式。因此你自己給控件設計外觀的靈活性是足夠的。

            你暫時只能通過C++代碼來開發(fā)一個皮膚,不過未來的版本將同時允許你用GacUI Editor制作一個皮膚,并保存成xml讓你在運行時使用(要不要生成C++代碼暫時還沒決定)。GacUI Editor會把所有的東西都打包成一個文件,你到時候把他當成二進制資源編譯進你的程序就可以了。

            至于那些需要真的執(zhí)行繪畫的部分(譬如說你開發(fā)一個windows畫圖),WPF用renderer independent的canvas和bitmap能解決,我覺得這個方法不錯,應該會實現(xiàn)它。

            針對每一個圖元,具體的renderer都回接管具體的渲染操作,因此現(xiàn)在你不能直接接觸到具體的HDC或者ID2D1RenderTarget之類的對象。底層的renderer是可以換的,不過卻不是定死的,你可以在程序開始之前用代碼指定一個renderer。如果圖元不夠(現(xiàn)在看來應該不會),系統(tǒng)的架構(gòu)也是允許你添加新圖元的,就是你需要為你喜歡的renderer做一個針對該圖元的實現(xiàn)(一般來說是不需要的)

            而且性能問題和內(nèi)存問題也不必擔心,這里的和前面幾個的demo那么復雜的圖,哪怕是debug,直接在explorer打開的時候都奇快無比,非常流暢。足以證明這個做法是高性能的。對于內(nèi)容很多的列表控件,我采用的是virtual list的模式。就算你一個item是一個按鈕,而且同時有1000000個item,我也只會真的創(chuàng)建幾十個(看得見的那些,而且有一些回收算法),因此不怕Create太多圖元會給內(nèi)存增加負擔,也不怕new太多對象會給性能造成影響(但是如果用VS直接F5一個debug就能看見少數(shù)的一點影響,但是如果使用一個release版本的dll,則不會有這個問題)。  回復  更多評論
              
            # re: GacUI完成TabControl和ListView的一部分視圖 2011-12-05 05:52 | ooseven
            @陳梓瀚(vczh)
            收到,謝謝您耐心的解答。我沒看到您的例子,所以不知道您的消息機制是怎么傳遞的,不知道能不能在demo里有所體現(xiàn)。還有我的軟件里需要有docking windows機制,不知道能不能加入到您的開發(fā)計劃中。如果方便的話,希望有qq聯(lián)系方式,我的qq是147340642,我把我的軟件傳給您看看。以期能得到您進一步的指導。
              回復  更多評論
              
            # re: GacUI完成TabControl和ListView的一部分視圖 2011-12-05 06:46 | 陳梓瀚(vczh)
            @ooseven
            docking我會按照vs的規(guī)格去做的,相信那個已經(jīng)夠強大了……還有,我的機制里面沒有自繪和非自繪的區(qū)別的,你可以認為我放的demo是自繪的。消息機制跟WPF和WinForm那一套很類似,不是跟api一樣靠一個int和兩個指針來回折騰的。

            請滾動到頁面的最上面獲取MSN,那個是16小時在線的。  回復  更多評論
              
            # re: GacUI完成TabControl和ListView的一部分視圖 2011-12-05 07:13 | Zblc
            飄過~  回復  更多評論
              
            # re: GacUI完成TabControl和ListView的一部分視圖 2011-12-06 01:37 | ooseven
            @陳梓瀚(vczh)
            已經(jīng)添加了msn,可是沒有回應。  回復  更多評論
              
            # re: GacUI完成TabControl和ListView的一部分視圖 2011-12-06 03:55 | 陳梓瀚(vczh)
            @ooseven
            已連接  回復  更多評論
              
            # re: GacUI完成TabControl和ListView的一部分視圖 2011-12-08 20:10 | Charm
            你好,我使用最新版的GUI,使用Direct2D渲染,感覺很卡,是不是沒有處理好某些細節(jié)導致的?Direct2D應該比GDI流暢才對吧。  回復  更多評論
              
            # re: GacUI完成TabControl和ListView的一部分視圖 2011-12-08 20:30 | Charm
            再次認真看了下,代碼風格很喜歡,哈哈。
            Direct2D版本的,剛啟動時候會很卡,過一會就好了,還有就是list沒做好獲取鼠標焦點,導致鼠標滾輪不起作用了,只能拖動滾動條,我也幫忙看看怎么加上去吧。  回復  更多評論
              
            # re: GacUI完成TabControl和ListView的一部分視圖 2011-12-10 03:08 | 陳梓瀚(vczh)
            @Charm
            我那個demo的DIrect2D版本的,Release不會卡,Debug的原因還沒查明。不過鑒于你發(fā)布的程序總是Release的,所以其實這也不是個什么問題。

            GDI的話總是不會卡,所以這應該是沒用好Direct2D導致的吧。以后找時間解決它。其實我覺得win7自從依賴了顯卡之后,GDI都變快了許多……

            其實現(xiàn)在我鍵盤操作和滾輪都沒做,所以當然焦點就不起作用了?,F(xiàn)在的焦點的用處只有文本框,還有各種變色功能而已……不過其實我已經(jīng)規(guī)劃好了。首先要讓滾動條支持滾輪,其次要支持把滾輪從一個focus的composition里面?zhèn)鬟f給滾動條。但是因為滾動條是橫的還是豎的只有IStyleController知道,所以這些任務都果斷交給IStyleController就好了。CommonStyles里面有一個滾動條的IStyleController的基礎設施,就添加在里面。而ScrollView的基類的IStyleController就做好傳遞給滾動條的動作。

            這樣的好處是,所有長得像ScrollView的東西(包括list),都會因為使用了ScrollView的IStyleController,從而因為commonstyles里面的動作而自動獲得滾輪的支持。  回復  更多評論
              
            国产精品一区二区久久国产| 国产成人久久精品麻豆一区| 久久精品国产亚洲一区二区| 亚洲中文字幕无码一久久区| 亚洲欧美日韩精品久久亚洲区| 久久婷婷五月综合97色直播| 国产精品久久久久久久久久免费| 91精品国产91久久久久福利| AAA级久久久精品无码片| 亚洲AV乱码久久精品蜜桃| 狠狠色婷婷久久一区二区| 人人狠狠综合久久88成人| 日韩精品久久久肉伦网站| 久久精品无码午夜福利理论片| 97久久精品午夜一区二区| 国产精品久久影院| 久久99精品国产99久久6| 精品久久久无码中文字幕| 午夜精品久久久久久久无码| 免费精品国产日韩热久久| 亚洲中文字幕久久精品无码APP| 色欲综合久久中文字幕网| 国产精品久久99| 久久国产视频99电影| 久久久久亚洲精品日久生情 | 中文字幕久久精品| 无码人妻久久一区二区三区| 国产成人精品久久二区二区| 久久精品国产亚洲av瑜伽| 超级97碰碰碰碰久久久久最新| 久久精品人成免费| 狠狠综合久久综合中文88| 国产A级毛片久久久精品毛片| 国产精品久久久久久搜索| 欧美激情精品久久久久久| 国产亚洲综合久久系列| 色青青草原桃花久久综合| 青青青青久久精品国产| 欧美熟妇另类久久久久久不卡| 久久影院亚洲一区| 日韩亚洲欧美久久久www综合网|