DirectUI與GUI框架有什麼區別,如MFC,QT,wxWidgets的區別是什麼?
01-15
在互聯網上搜索了一下,發現相關的文獻並不是很多。似乎 DirectUI 專指一種在控制項內部自己通過繪圖命令繪製控制項的 UI 設計方式。類似於瀏覽器這種。但是這樣做有什麼好處呢?為什麼現在國內的一些軟體(360、迅雷、QQ)不使用成熟的 GUI 框架(例如 QT)而要採用 DirectUI 這樣一種方式呢?它和傳統的 GUI 又有什麼區別呢?
wxwidgets不了解
MFC和Qt widget裡面每個控制項都是window,這是和DirectUI最大的區別。
Qt quick和DirectUI裡面的控制項都是邏輯上的,最終由主窗口統一渲染出來的,和瀏覽器的實現幾乎一致。這些都得益於於PC性能的提升,這類技術在2000年之前很少流行,都是因為太卡。
這種方式的好處很多,比如自定義界面的實現,快速換膚,動態切換等,這些東西在MFC裡面不是不能做,只是對程序員要求很高。而且由此延伸出來,界面和邏輯的徹底分離,這個優點是足以改變開發模式的革命性優勢。
另外一大特點就是發布包的輕量化,例如和Qt比較,Qt5動輒40多M的發布包,跟最精簡的DirectUI實現,才300k左右。國內一些桌面軟體,之所以用這方面技術,一則國內各種花招、自定義的東西特別多,二則也是這方面程序員在桌面開發技術上的積累有些過剩(當然是事後看來),三則應該是開源的緣故,第四估計網路帶寬也是成本,作為網路上的軟體,能小則小點吧。。。傳統的基於handle的gui框架,在做一些特效,混合動畫,異型控制項等fluid界面里流行的元素時,過程繁瑣,性能低下,甚至做不了,非常不給力。DirectUi則比較靈活,因為所有控制項都由自己繪製,混合,動畫等都能比較好的由自己掌控,突破多handle界面的條條框框,如果採用OpenGL,Direct3D,Direct2D等作為繪圖後端的話,還能獲得一定的硬體加速能力。Qt發展到現在,不管是Qt widgets,還是Qml,都可以做DirectUi了,只是Qml以OpenGL或基於Direct3D的opengl為後端,做ui動畫,混合的時候,性能更加強勁,更加靈活。
其實瀏覽器就是一個DirectUI框架,我們通過html css這種標記語言來繪製圖形界面。
所有控制項都沒有窗口句柄,這是最大的區別。
就是控制項沒有窗口句柄,也就是HWND句柄, 所有的控制項都是自己實現的,只有最上層窗口是系統的.
這樣一切都有自己控制,隨心所欲. 你可以了解下炫彩界面庫 http://www.xcgui.com 就是DirectUI思想的
Java的Swing就是一個DirectUI,所有輕量級控制項都是虛擬機畫出來的,只不過沒有流行開,但是思想是正確的。
現在的web瀏覽器裡面的網頁,也是DirectUI,網頁里的控制項也都是瀏覽器畫出來的。
推薦閱讀:
※電腦桌面背景可以總是前置嗎?
※老師教的MFC,可是win10不能安裝vc++6.0怎麼辦?
※C++、Visual C++、MFC(編譯和封裝)之間的關係是什麼?
※一個月怎麼寫一個窗口程序?