|
微軟曾經對WPF(代號Avalon)抱很大的期望——新一代的華麗用戶界面平臺,一統(tǒng)Web應用和桌面應用,Flash殺手,盡管微軟口頭上不承認。幾年下來,WPF確實實現了當初的預期的大部分功能,但離稱霸軟件開發(fā)領域還有不小的距離。不過,剛轉到 WinForm上一兩年的開發(fā)人員們都很困惑,WinForm究竟還有沒有未來。微軟只是模糊地說短期內還是WinForm,長期是WPF。想想“維納斯”,“TabletPC”,“Hailstorm”,“IE Channels”等等就知道這位老大的話不能全信。到底何去何從就仁者見仁智者見智了。 英文開發(fā)社區(qū)內有句流行的話,叫“No silver bullet”,就是說沒有萬能,沒有一個工具或方法能完美地解決所有的問題。同樣這對WPF也適用。與其說WPF是WinForm的替代品,它更像DHTML和ASP.NET。夸張一點說,如果要給微軟的技術畫個家譜的話,DHTML就是WPF的直系親屬。WPF里的大量核心概念和結構,如屬性引擎、事件模型等,都是繼承自 DHTML,最大的一個不同是外觀和控件邏輯的分離。WPF應用和DHTML應用(HTA)的相似性也非常大,不同點是WPF應用可以完全脫離IE。也就是說,WPF和網頁、ASP.NET、SVG是一套體系,可以比作XML版的Flash,而和WinForm完全不同。WPF的長項應該是網頁式應用,當然它也可以用來做別的東西,就像Ajax可以做在線文本編輯器一樣。 也許有人還沒聽說過DHTML。DHTML即Dynamic HTML,是微軟在90年代末在IE4里支持的擴展了的HTML,主要特征就是可以動態(tài)修改網頁上對象的屬性,而且具有類似Flash里的時間線,可以做動態(tài)的網頁。缺點是難于開發(fā)和調試。后來主要被用來做翻轉按鈕。DHTML的一個頁面集合和腳本資源一起可以打包成HTA應用,HTA應用可以在本機以及網絡上使用。但從現在還有多少人記得DHTML就知道這東西沒成才。 回到WPF,WPF只在XP和Vista上有完整的支持,在其他平臺和瀏覽器下,微軟提供了WPF/E(開發(fā)代號)。WPF/E的程序是非編譯的,就是說是發(fā)布源碼的,和HTML加JavaScript一樣。另外WPF/E目前只支持JavaScript。那么,WPF/E能用來做什么應用大家也就心里明白了。要在WPF/E和Flash間選擇的話,只要想想XML和壓縮的二進制文件的區(qū)別就行了,現在幾兆的Flash比比皆是,改用XML格式的話會有多大,諸位心里明白。不過要是個網頁Form應用的話,WPF/E確實比Flash更強一些,不過有Ajax在,殺雞未必要用牛刀。如果你的應用只支持XP 和Vista,那么你可以得到WPF的全部優(yōu)勢。 WPF有三種應用模式:應用、瀏覽應用、文檔應用。應用就是一般的窗口應用,瀏覽應用就是象網頁一樣的一頁一頁的應用,文檔應用是用來顯示內容的瀏覽應用功能子集,而不是MVC模型。一般應用其實也就是每個頁面擁有一個獨立的窗口。估計VB用戶想到了當年的html控件,Delphi用戶想到了 IntraWeb。簡單的理解就是把WinForm界面換成了網頁,當然這個網頁的功能比HTML強得多,也復雜得多。 WPF是一套很復雜的體系,它的界面可以用代碼生成,不過絕大多數人都會用XAML來生成。XAML可以認為是WPF的HTML。制定標準的人總是說 XML是可讀的,但多數人認為它是用來給機器讀的。XMAL基于XML,同時做了相當的擴展以彌補功能的不足。要手寫XAML,必須了解WPF,了解 XML(namespace,link等等),了解XAML的規(guī)則,了解XAML擴展的語法,能夠記住大量的標識符和引用關系。就像今天人們大多不再手寫 HTML一樣,人們大多不會愿意去手寫更復雜的XAML。而且按照微軟的設計目標,WPF要將界面設計和程序邏輯分開,交給不同的專業(yè)人員去做。也就是說,界面的設計是要交給美工的。相信我,找一個能夠手寫XAML的美工很難。微軟為此提供了Expression系列軟件,當然不是免費的。當然 VisualStudio里也有一定程度的支持,但這意味著由程序員來做靈活復雜的界面,更容易做出丑陋的界面;或者讓美工來用 VisualStudio,功能有限而且有點昂貴。當然也可能有個不錯的UI程序員,兩全其美;或者老老實實地做簡單樸素的界面,以后有機會再找美工潤色。 程序員都喜歡談論速度。WPF是可以硬件加速的,在DirectX 9級顯卡和安裝了較新的驅動的情況下,WPF會得到部分或完全的硬件加速。WinForm是基于GDI+的,沒有硬件加速,只有v2.0里的非兼容模式下的文本是通過GDI加速的。所以,長遠來說,WPF有更好的性能。 那么現在回到最初的問題,WPF和WinForm,賭注該壓哪一邊。編輯器類程序是難以移植到WPF的,如World、Excel、 PowerPoint、Photoshop、IDE等。顯示類和一般的商務類應用都是可以移植的,現有的Web應用都是可移植的。也就是說,WPF的應用范圍和Ajax、Flash是有很大重合的,WPF的競爭力就是在和代碼的集成上。隨著Adobe加緊升級Flash的應用功能,一種可能的結果是WPF 和Flash壓縮了Ajax的生存空間,WPF/E沒有獲得足夠的支持,WPF成為Windows專用的應用,Flash作為跨平臺方案存在。而對 WinForm程序來講,嵌入一些WPF內容是容易的。在WPF前途未卜的情況下,WinForm仍然是目前一般應用最穩(wěn)妥的途徑。
對比MFC ,Winform ,WPF winform 封裝了 win32 的api,多次進行P/invoke 操作 (大部分使用p/invoke操作封裝),速度慢。 wpf是一種新的模型,不再使用win32 模型,自己新建模型,使用dx 作為新的顯示技術,直接訪問驅動程序,加快了運行速度,可是,這種模型,需要支持dx 9 的顯卡,硬件要求高(你還能找到現代機器不支持dx9 的嗎?) 開發(fā)效率上,MFC <WPF <winform 盡管MFC開發(fā)界面執(zhí)行效率高但是開發(fā)效率低,作為現在的項目開發(fā)來說時間跟開發(fā)效率往往能決定項目的成敗,所以除非有特別的需求,否則都回盡量避免用mfc來做開發(fā),MFC只是一個弱封裝器。 開發(fā)成本,MFC〉wpf〉winform 用MFC開發(fā)成本太高,對開發(fā)者能力要求更高,作為客服當然希望開發(fā)的費用越少越好,開發(fā)者當然希望錢賺得越多越好,這樣一比,這也是MFC沒落的一個很大的原因。 界面執(zhí)行效率上,MFC==WPF〉winform 隨著計算機硬件的性能提高,多核cpu的普及,它們的差距會越來越小。 開發(fā)靈活性上:wpf〉MFC〉winform 美觀上:Wpf〉winform〉MFC 這一項中MFC下要開發(fā)出一個華麗的ui極其困難,也許你可以說你可以用控件,但是商業(yè)開發(fā)控件是要收費的??!Wpf很容易就可以做出vista那樣的ui特效。mfc要寫出這種效果不知要寫到何年何月。 內存使用上:wpf〉winform〉MFC 隨著計算機硬件的性能提高wpf這個缺點會被忽略。 使用范圍:wpf〉MFC==winform 有以上可知:WPF 大有取代winform 和MFC之勢,從未來net的發(fā)展來看,MFC以后只會變成一種經典,作為一種技術來供開發(fā)者學習,winform和WPF兩者會并存發(fā)展,但最終都會被WPF取代,最終實現桌面應用程序和瀏覽器應用程序的統(tǒng)一。 |
|
|
來自: AllHere > 《windows GUI 開發(fā)》