轉: 關於UI開發(總結一些技術和一些論壇牛人討論)

1,MFChtml

基於VC6.0的微軟基礎庫編程

2,WPFwindows

作絢麗界面一概用WPF,作通常絢麗界面用WinForm,作windows標準界面用MFC 瀏覽器

WPF也有個致命缺點,就是要.net framework支持 安全

3,DirectUI網絡

Windowsless或者Handleless,也就是無句柄窗口架構

4,迅雷界面引擎框架

http://xldoc.xl7.xunlei.com/ less

迅雷7應用開發在線文檔ide

Thunder7

XAP

界面引擎

迅雷下載開放引擎

迅雷基礎庫

5,網上討論

///////////////////////////////////////////////////

(1)windowless或者稱handleless,也就是無句柄窗口,在設計和實現的時候,每一個控件都本身實現,最後畫到父窗口中。另外一個僞windowless是用標準mfc控件,而後經過hook或其它遠程線程注入等技術,讓spy++等軟件,看不到窗口句柄。這主要是爲了防止盜號木馬經過edit窗口句柄,盜取用戶名和密碼。 

(2)windowless 或 handleless 或 DirectUI 技術,將首選 WGI !WGI 後生可畏,將是永遠的經典! http://code.google.com/p/oic-wgi/downloads/list 基於C語言

(3)qq和msn都是windowless方式 

(4)windowless技術並非適用全部的軟件界面。這一點還須要開發者自已分清楚。

就目前來說windowless比較適用於基於對話框的應用程序。 

(5)DirectUI是目前windows平臺上最流行的一種無窗口界面技術
顯然是最不流行的技術,使用無句柄方式的軟件,只是百裏挑一。
全部控件都是虛擬控件沒有實際窗口,所以效率更高,更安全。
這個有什麼必然聯繫嗎?爲何效率會高呢?安全性更是無從談起呀。用windowless就安全?

國內流行的QQ/MSN/迅雷等都採用此種技術
這個說對了。可是,msn雖然沒有窗口句柄,可是有另外一種句柄,爲此,軟件還作了相似spy++的工具來得到這個句柄 

(6)界面開發主要解決的問題是:如何把美工的創意,更方便的用代碼實現。或者,界面開發技術限制了哪些美術創意的實現? 

(7)感受windowless,DirectUI這種技術,只有這種大公司纔有能力搞。
據說QQ 搞這個東西都搞了快5年了,開發投入超千萬。

感受這種東西要作出通用的太難了
你看QQ的全部軟件,也不是全部的軟件都是這種windowless的。
微軟的就不用說了,在msn,xp裏面有些部分應用。

我猜想他們作的這個東西,雖然能夠用了,但內部沒有所有推廣使用。緣由多是還不夠通用,還不夠成熟。

(8)微軟是由於內部太多界面庫了。各個部門各用各的。

QQ這種,純粹是爲了本身產品服務的,人家也不會賣本身的庫,因此不須要通用。自已的產品須要什麼控件,就往庫裏開發什麼控件。 

(9)windowless做爲一種新的界面技術,固然要從新實現Win32界面原來的提供的機制了,
窗口的剪裁、激活、繪製、消息循環,每個新的界面機制都要本身實現這些東西的,
這怎麼算致命的缺點呢?

我我的仍是很喜歡windowless的界面機制的,很是自由,開發者能夠天馬行空的實現本身的想法創意,
傳統的win32架構界面開發總有種帶着鐐銬跳舞的感受。 

(10)windowless能夠增長破解外掛的難度,也就是增長了破解的門檻,不是隨便會弄個對話框程序就能夠破解,但仍是不能根本解決問題,QQ登陸密碼,同樣能夠拿到。 

(11)wpf慢死你~學那麼多技術幹嗎,學好win32就能夠了。wpf過幾年沒了,就出來了fpw了 

(12)從CWnd直接派生,也能夠天馬行空的實現本身的想法創意。而且在實現創意是,不用考慮另人頭痛的剪裁、焦點、消息循環等等與界面不相關的東東。 

(13)wpf與我討論的windowless不是一個概念。
我說的windowless,是指我們普通人或通常公司開發的。wpf也是windowless,固然不致命,也不是缺點了。而且大部分界面編程的人,都應該學學的。你學習一個小公司內部的windowless產品,說句很差聽的,跳槽也很差找工做,固然,若是你是這個windowless產品的設計者,那你仍是很吃香的。wpf雖然已經誕生不少年了,但國內到如今依然沒有普及,那是由於xp如今還佔據大部分人的桌面,學習wpf,會有更多工做機會。我考查了部分windowless產品,包括號稱輕量化wpf的windowless的產品,離wpf相去甚遠,wpf中的數據綁定、佈局、資源、事件、動畫、3D等等核心或非核心技術,通通沒有。 

(14)其實樓主說了這麼多,無非就是一點:「windows作完這一整套東西已是至關大的工做量,你們再從新開發徹底得不償失並且難以達到Windows gui的穩定性」。
  但在看來,Windows那套框架因爲開發的年代過久,不少概念太落後了。各類元素的複用性太差。這點和swing對比就知道。因此本身開發Windowless的好處就是鍛鍊本身的構架能力。
  不過我仍是比較贊成樓主的觀點。要想寫成Windows那麼穩定的gui,要至關大的耐心和工做量。
  而樓主贊同wpf,我不敢苟同,具體可見:http://topic.csdn.net/u/20110125/14/4702420d-8d03-46cb-99a7-8001771e2127.html?62503  
裏面有段話很經典:「第五個問題是慢,驚人的慢。你們能夠看看「飛信」,這是一個微軟控主導決策的,嗯,使用.net 2.0。爲了解決程序發佈的問題,專門弄了個微型的.net框架,可是你將它與QQ比,是否是以爲慢得太多?持續多年之後,移動的先生們不耐煩了,纔有的如今的基於C++的原生版本,請比較一下速度。這裏特別提醒一下,飛信的開發,是中國移動投入巨資、獲得微軟中國整個團隊無微不至的支持的,這些高人甚至赤膊上陣親自動手,這樣使用他們的開發工具,歷時數年也不過是作出一個被淘汰的產品。先生,請掂量一下,你比他們這些傢伙更厲害嗎?你比孩子的母親對孩子更瞭解嗎?」 

(15)若是須要文檔/視圖的話,仍是用mfc好了,如今mfc很漂亮了,像office2007。
vs2010貌似wpf作的,恩 確實佩服。
不知道office2010是怎麼作的。

緊跟大公司新技術吧,要不就找個認爲設計的好的開源項目,一直用、一直改。不過跟着大公司走仍是最好的選擇吧 

(16)丟一個這東西出來好了。
http://www.viksoe.dk/code/windowless1.htm
雖然這東西的模型設計的我不太喜歡,不過絕對是學習的好材料。並且自己也很是美觀,這是gdi作的windowsless。 

(17)我其實把mfc和windowless都歸到win32技術體系的,實現上windowless也是用mfc開發,只不過不使用它默認的CButton等這些控件,仍然使用GDI或GDI+等技術來繪製。正如你說的,這個體系有點久遠,因此微軟設計了wpf,來逐步代替win32。到目前爲止wpf仍是不成功的。但我堅信,早晚一天會成功的。wpf開發的產品,體積又大,運行速度又慢,是制約它發展的最大瓶頸。不過vs2010採用wpf開發後,發現,像vs2010這麼大規則的項目,其實運行速度已經很快了,不比vs2008差多少。或許microsoft作過優化? 

(18)到討論成這樣了,那gtk,qt這類的怎麼活啊.

我也拋一個出來,娛樂一下
Nana C++ Library
http://stdex.sourceforge.net 

(19)嘿嘿, 我喜歡GTK。 見到看到一篇文:Qt vs GTK

另外, VS2010中,MFC已經作了大量的擴充,能夠作出漂亮的界面的 

(20)若是非要用Direct UI作項目,從研發成本考慮,還不如直接花錢買一套UI庫,我看這個公司的就不錯:http://www.directui.com/,全部的控件所有用接口的形式訪問。 

(21)對微軟來講,作一個NATIVE-WPF易如反掌。蔣晟大大也說過,微軟內部也討論過這個問題,不過最終放棄了。這個能夠理解,WPF是.NET的殺手鐗,若是把這個殺手鐗轉交給非託管語言,對.NET戰略是致命的。我還真想知道,若是沒有WPF,還有多少人會選擇.NET。討論這個沒有意義。

仍是回到windowless吧。近幾年不少人關注DirectUI/Windowless,殊不知DirectUI爲什麼物。我曾經在某個帖子裏面作過比喻:DirectUI = Window + Windowless,全部在屏幕上顯示的東西都是DirectUI方式,3D是,瀏覽器是,連普通窗口也是,你們都在顯存的同一塊區域顯示全部內容,哪裏分什麼有窗口無窗口。爲何要把窗口分紅有句柄和無句柄呢?由於微軟的有句柄窗口是工業標準,操做方式有章可循,窗口API你們耳熟能詳,家家戶戶都用沒有鎖的門窗,全部人都知道該怎麼操做窗口,偷雞摸狗的人固然也知道,因此第一個問題就是標準帶來了更高的安全風險,因而乎不少人開始但願在自家門窗上加一把鎖,並且只有本身有鑰匙。最先加鎖的人仍是微軟本身,MSN要保護用戶隱私,搞了個DirectUIHWND,被人發現後,DirectUI這個名稱就逐漸擴散開來,也有愈來愈多的軟件給本身的窗口加了鎖。從這個時候起,DirectUI = Windowless,就是爲了跟不安全的有句柄窗口區別開來。DirectUI 的另外一層含義就是隱祕、非標準,這個概念會在用戶內心生根,一旦有哪家的所謂 DirectUI 窗口由於流行而不幸成爲另外一個標準,它絕對會被人們踢出 DirectUI 陣營,結局跟有句柄窗口沒什麼兩樣,就由於太標準而失去了隱祕的特性。也正是由於隱祕、非標準的特性,多少人削尖腦殼想找到 DirectUI 框架、類庫、標準,結果是找不到的,由於沒有標準。反過來講,只要不是標準的,均可以叫作 DirectUI,人人均可以自詡個人窗口是 DirectUI,其實不用誇,原本就是,誇多了會誤導更多人。

固然,Windowless 不只僅是爲了安全,在能力上天然也有本身的過人之處,這些能力就交給樓主來總結吧,我只舉個最小的例子:若是想讓一個窗口的某個子控件藏在背景貼圖的後面,普通窗口是辦不到的,對Windowless來講垂手可得。 

(22)你忽視了handless一個最大的好處,就是無閃爍繪圖,使用思想老舊的win32控件是很難作到毫無閃爍的。

p.s 如今騰訊全系列產品都是DirectUI。能夠看到,它全部窗口的類名是TXGuiFoundation,它的目的很明顯就是想成爲騰訊的MFC(Microsoft Foundation Classes)。 

(23)duilib 庫不錯,是開源的。。如今正在發展。但願各位能夠參與
www.duilib.org 

(24)這個和閃爍沒有任何關係。win32方式,能夠作的一點閃爍也沒有。windowless,若是作很差,也是很是閃的。另外,所我瞭解,DirectUI是有copyright的,是個公司的產品名,不能隨便叫。

騰訊公司使用這種無窗口方式,一是爲了防止第三方外掛。人家本身開發本身用,固然一點問題沒有。某我的離職了,還會有新來的人開發,不用擔憂出了問題沒人管。 

(25)樓主洋洋灑灑寫了這麼多,從你列舉的諸多缺點裏面我能夠看出你的水平,你最多隻是瞭解一些MFC,你可知除了MFC框架還有不少,並且更加優秀。
其餘的不討論,我就把你所說的缺點一條一條的給你反駁吧

1:無窗口句柄只是內部的顯示控件沒有句柄,對這些控件的顯示與否徹底能夠經過 一個Show方法從新進行封裝,並且可控性更強
  每一個控件也一樣有本身的座標屬性,好比Top,Left 來進行移動!

2:消息歷來沒有做廢,每一個控件也一樣有本身的消息處理函數,只是咱們在窗體消息循環裏面把須要的消息派發給這些自定義控件就能夠了

關於以上兩點你能夠了解一下VCL,能夠說用Delphi隨便拖幾個控件(從TGraphicControl繼承)上去就是一個 Windowless界面了。有時你甚至感受不出來
這些TGraphicControl控件和不一樣的標準控件有什麼不一樣。

3:若是你的程序寫好了,更換界面須要花費的時間比開發時間還長,只能說這個軟件架構就是一坨屎!連最簡單的邏輯和界面分離都沒有把握好?

4:你用過別人開發的windowless控件嗎? 學習更多地東西會影響你的職業生涯嗎?  

5:軟件的穩定和可靠性徹底不是界面的事! 你仍是先分清界面和邏輯功能的不一樣吧。

6:仍是架構問題!功能層代碼應該徹底和界面分離,若是你採用發送消息就已是把功能和界面綁死了! 爲何不把界面設計成實現一個接口,好比有Update()
  方法,無論界面採用何種方式,只要實現了接口中的Update方法就能夠了。  

7:這些都有成熟的機制,裁剪和座標變化就兩個函數,繪製若是想要漂亮的界面無論你採用什麼方法,都要繪製的。

8: 按你這條的意思在C#,JAVA剛出來的時候我也能夠這樣說:全球幾乎全部的軟件都是使用C,C++開發的.......。
  Windowless也是一種思想,wpf只不過是這種思想的一種實現罷了。

9:後期漢化..對這條:配置文件!你不是用過ini,xml嗎? 對多語言的支持不只僅是翻譯一下,界面也要進行調節,
  你就是採用標準的win32控件不也要配置? 後面的運行去其餘程序發來的標準消息,這個需求我不懂何時要用到: 給木馬病毒留的後門?

10:這條纔是你真是水平! 文檔/視圖不是MFC的專利,這是一種架構思想,若是脫離了MFC就不能使用文檔/視圖架構只能說
  你就是一個填代碼的苦力。 那我又問你: 大家項目採用Wpf,裏面也沒有文檔/視圖架構啊! 你不快終結項目,繼續MFC。。。

 你眼中這些技術僅僅是表面的技術,徹底沒有看到各類架構,各類設計的本質思想,因此你不會熟練運用它們,最後只會調用現成的方法!
 我最後總結:你僅僅是弄了幾年界面,搶了美工的活! 

///////////////////////////////////////////////////

(1)DirectUI是一種技術簡稱,也叫windowless,不要被忽悠了。
國內作DirectUI的公司不少,有bodsoft,uieasy,uipower。
還有開源的duilib,那個uipower只是佔了個directui的域名而已。

建議考慮迅雷7的界面引擎,目前已經開放了,均可以用。
文檔各方面會不斷完善,有興趣可加QQ羣:62552336
http://xldoc.xl7.xunlei.com/0000000018/index.html 

(2)迅雷7用DirectUI作出的效果就很漂亮。 

(3)若是你們有興趣,能夠看看SKINSE界面庫。至於SKINSE到底怎麼用?我相信下載看過的人會明白!!!
http://www.skinse.com/ 

(4)DirectUI作出的界面效果還能夠,不過自身也要有過硬的技術作基礎。
樓主能夠借鑑一下qq的界面,貌似qq從2007開始就一直在用DirectUI作界面。不過真實性無從考證。 

(5)雖然DirectUI開發界面的效果不錯,可是目前國內用DirectUI和懂DirectUI的人並很少。 

(6)若是MFC足夠好用,可能會有那麼多UI庫嗎?說句很差聽的,若是不是VC捆綁MFC,還會有多少人用不三不四的垃圾MFC! 

///////////////////////////////////////////////////

(1)今年開始玩DirectUI,參考老外的程序,寫了個DirectUI的Demo, 支持各類Layout,實現了各類基本控件(SplitBar, PictureBox, Button, Radio, CheckBox, Label, HyperLink, ProgressBar, trackBar, ListBox, Edit, ComboBox, Tab Control, Toolbar, Menu, tree),支持鍵盤導航,支持Tooltip,支持多語言,支持換膚,支持異形窗口,支持插件2次開發,支持Alpha通道,支持各類圖像處理。

而後最近開始學WPF,學後本身的程序就不想再寫了,感受再寫基於GDI的DirectUI已經沒多少意義,基本上QQ的UI已經是基於GDI的DirectUI的極致了。

感受理想的DirectUI設計上能夠仿WPF,底層Render方式能夠切換(Direct3D, OpenGL, GDI), 支持腳本,而且跨平臺,應用程序和遊戲均可以用,如今我還沒找到這麼一套東西,不知你們對DirectUI怎麼看?

Demo下載:http://download.csdn.net/detail/weiym/3698407 

(2)要是支持那麼多功能話,那得多大,這種界面庫以儘可能輕量級比較好,不然和WPF又有什麼區別呢。
你要想那樣的話,乾脆直接界面用WPF或SilverLight吧,跨平臺也支持硬件加速,支持XAML、CSS什麼的…… 

(3)這樣的東西不必定大的,好比Render方式是可插拔的,根據不一樣的狀況加載不一樣Render Engine就行了。
腳本支持通常是JavaScript,也是插件的方式,能夠打開或關閉,能夠考慮用Chrome的V8或是SpiderMonkey, Windows平臺上也能夠直接用MS IActiveScript.
跨平臺很重要,能夠在嵌入式裏使用,因此Render通常能夠用OpenGL,這樣MAC什麼的都支持。

雖然說工程比較龐大,編譯出的東西其實不必定大的。就像WPF,若是脫離.Net,其實也就幾個DLL。 

(4)WPF和DirectUI確實一模一樣啊!:區別也有些:
就是DirectUI能夠是GDI的,也能夠是GDI+的。 而WPF本質是GDI+的【底層可能也用到硬件加速】,

另外不一樣的是WPF的抽象更好,並且WPF/Silverlight更爲輕量【固然了,排除掉.Net的部署的考慮】

大多數C++的DirectUI停留在XML配置靜態UI,而後C++來實現後臺邏輯。
而WPF更近一步,XAML除了配置UI,也能夠指定必定的動畫。

大多數的C++的一個Xml就是一個完整的UI,不能嵌套,缺少重用性。
而WPF的XAML能夠有更好的模塊化,能夠經過網絡Laz-Loading。
----------------------------------------------------------------------------------------

固然了。。。真正寫軟件的時候,WPF就靠邊站了。。。
QQ是C++DirectUI的,360安全桌面,軟件管家是C++DirectUI的,金山不少產品也是C++DirectUI的【並且開源了,有人把它的UI抽出來了】

Qt的QML本質也算是C++DirectUI的。

可是問題是如今C++DirectUI的方式會愈來愈少了。。。
------------------------------------------------------------------------------------------

Win8會更多支持HTML5,估計WPF也會被支持的很好。
iOS/MAC OS X人家無所謂,UI老是那麼簡單弱智,沒有什麼換膚的需求【我不多看到哪一個Mac的程序還支持換膚,並且Mac的程序感受UI都很簡單。】 

-------------------------------------------------------------------------------
我本身也在作DirectUI,是基於WTL的,而不是基於MFC的。感受WTL的消息映射宏很帥! 

(5)目前開源的duilib就支持動態添加控件啊,插入一段Xml控件描述便可生成相應控件,毫不是靜態UI
基於gdi的directUI更適合移植 

(6)討論DirectUI已經沒有意思了,這個玩意兒已經被炒爛了,自繪而已,加上一點消息處理,沒東西了。

XML描述UI更是噱頭,一種配置格式而已,跟INI、對話框模板沒有本質區別。再高級再動態的XML描述也擺脫不了須要指定控件位置大小的侷限。惟一不需指定控件位置且全自動佈局的只有HTML。

腳本就不要強求了,只是一個更具靈活性的擴展方式而已。若是在體系結構上不能整理出完整統一的對象模型,還不如不要腳本,要否則腳本編寫者會不停抱怨這個功能沒有、那個功能沒有,底層更新代碼都得累死。

硬件加速的渲染,若是沒有足夠的積累,仍是不要輕易去碰,這是找罪受,不光是門檻過高的緣由,箇中滋味本身試試就知道了。這句是我最大的忠告。

動畫,有一點點就能夠了,沒有太呆板,多了傷眼睛,我如今很煩瀏覽器中鋪天蓋地的FLASH動畫。這是UI和遊戲的最大區別,遊戲沒動畫就無法玩了。好在動畫門檻不高,搞點小特效還算比較容易。作個通用動畫也不算太難,WPF中的通用動畫技術仍是很值得借鑑的,由於人家總結得很是好。

跨平臺,見仁見智吧,我以爲本身沒有多少發言權。定好目標客戶再決定要不要跨平臺。跨平臺的難度不在於多平臺編碼經驗,而是設計水平。

一家之言,我也是搞UI庫的,上面的全部技術我都嘗試過。不過惋惜,沒定好用戶羣,有嚴重的方向性錯誤。 

(7)網上有開原的DUILib,核心的消息分發代碼是相似的,你能夠直接參考他的學習。 

(8)如今看來WPF是最優秀的DirectUI, 他底層應該是基於D3D的。
配置的XML能處理一些簡單的邏輯和動畫配置,都是否是太難。
QT沒怎麼用過,我的以爲它在Windows上的跨平臺應該仍是基於窗口的。
C++方式的DirectUI,我的以爲在嵌入式應該有普遍應用,在Windows上的話界面和性能要求都比較高的時候仍是有競爭力的,固然前提是這套DirectUI基於D3D。 

(9)多謝忠告,我的以爲跨平臺是DirectUI的優點,在windows和Mac上它或許沒多少競爭優點,可是在嵌入式和手機平臺開發上,DirectUI仍是頗有價值的。另外WPF的設計思想對於設計一套優秀的DirectUI Library 仍是頗有借鑑意義的。 

(10)你說得對,3D的玩意兒在嵌入式可能更有市場,這也是我努力的目標。爲嵌入式設備定製大量的3D特效,也不須要爲PC的那些懶用戶製做UI設計器了,在桌面市場作3D-UI感受有點吃力不討好。 

(11)我在WinCE中使用DirectUI, PC機下確實意義不大,嵌入式的卻比較好. 

(12)界面的核心永遠在於佈局,審美,而不在於技術,DUI已經沒嚼頭了。

相關文章
相關標籤/搜索