1. 程式人生 > >各種介面技術比較

各種介面技術比較

前言

縱觀這幾年,介面庫的發展可謂風聲水起,諷刺意味的是:大家對PC上的介面重視程度,來源於手機介面的發展。當蘋果出現時,徹底讓人們對介面的需求,提高了一個臺階。隨之而來的是粗糙介面的塞班介面的沒落。

過去,人們不太重視軟體介面,把更多的精力放到程式功能上。現在人們越來越意識到,一個好的介面對產品的成功有時起著關鍵性作用。這是好現象,在產品同質化嚴重的今天,一個好的介面,就會讓產品脫穎而出。

介面庫的分代

在VC++開發上,介面大致經歷了這麼幾代:
第一代Win32原生態介面:包含對它進行封裝的MFC、ATL等。由於它足夠相容、足夠穩定、足夠淳樸,一直到現在還佔有大量的市場。不過它逐漸被壓縮到一些專業軟體上。在IM、播放器、防毒等領域,已經不能想像一個原生態介面會是什麼樣子了。


第二代Hook換膚庫:這是為了解決Win32原生態介面“淳樸”外觀而誕生的。以SkinMagic、SkinPlusPlus、SkinSharp等為代表。它有一個看起來美麗、又特別唬人的特性:一句程式碼換膚。是的,它能做的也僅限於此了。因為它不介入介面開發,所以不會提高介面開發效率;因為你只調用了它一行程式碼,所以,Hook換膚庫裡有任何bug,你都無法繞開,除非你註釋掉這行程式碼,不用它,而bug幾乎是一定有的;因為Hook介面庫只認識控制元件型別,不認識具體控制元件,也就是說,換膚後,所有同類型控制元件,都會長一個樣,很難做到個性化。兼於種種原因,所以Hook介面庫早已光榮退休了。


第三代DUI介面庫:dui是Directui的簡稱,也稱作windowless,意思是無控制代碼,以duilib為代表。前兩年,大家都搞dui,dui著實火了一陣兒。當初產生dui,其中一個原因是自繪某些win32控制元件特別困難,與其花大力自繪這些win32控制元件,還不如干脆自己開發一個得了;另一個原因是他們自認為dui比win32控制元件安全,實際上完全不是的。隨著這兩年使用的深入,dui的各種弊端都逐漸暴露出來了。dui控制元件是比照著win32控制元件來實現的,這句話的潛臺詞是:win32控制元件是標準,是被模仿的物件。雖然理論上,dui可以完整的模擬出一個win32控制元件,但一個比較糟糕的現實是:國內做dui的程式設計師,幾乎沒有人知道一個完整的win32控制元件應該是什麼樣、具有什麼功能。所以他們只能模仿他們看到的部分。dui介面庫雖然相對於win32原生態控制元件,提供了控制元件貼圖的功能、但卻失去了更多本來應有的功能,變成了一朵豔麗的假花兒。我們知道,win32控制元件是windows作業系統提供的基礎控制元件,windows可以保證它一直擁有著最新特性。舉個例子,我們在windows xp上,製作了一個介面,介面上有個Tree控制元件。當把這個編譯好的exe放到裝了Win8系統且帶多點觸控式螢幕的電腦上執行時,Tree控制元件會自動具有慣性滑屏的功能,雖然xp不支援多點觸控。當我們開啟系統的介面朗讀功能時,用鍵盤在Tree控制元件上操作,系統會自動根據您所選的Item,正確朗讀出來。(這正是Accessibility法案的一條要求,對於出口到歐美國家的軟體,Accessibility法案是強制規定。所以,目前還沒有任何一個國產的dui庫做的介面,達到這一強制規定)。當將來的Win9、win10等系統有新功能時,這些Win32控制元件,會自動擁有這些功能。這一點是dui介面完全不具備的。


現在還有一種介面庫,為了區分,暫稱之為DirectHWND技術吧:以LibUIDK為代表。它從原生win32控制元件派生,保留了win32控制元件所有特性、擁有完整的訊息機制、與win32控制元件完全一樣的程式設計思想(意味著幾乎忽略不計的學習和維護成本、更小的風險,如果是dui庫,你得按它的方式來呼叫,它封裝成com,你就得懂com)、又提供了dui介面的自繪功能。是win32控制元件與dui的完美組合。下圖可以表示win32控制元件、dui控制元件和HWND-DirectUI控制元件三者的關係。