Windows用戶端開發簡介(二)

來源:互聯網
上載者:User

標籤:windows c++   介面   ui   pc   c++   

Windows用戶端開發簡介(二)

一個典型的Windows用戶端程式要有哪幾部分構成呢?下面我會以一個國內比較流行的互連網用戶端程式的基本架構來跟大家逐步展開分析,由於涉及到智慧財產權的問題,請大家不要問我是什麼產品,當然,如果你能猜到,那我就管不著了^_^。

某視頻影音互連網PC用戶端產品基本架構


         如上只是個粗略的分層架構圖,沒有更細緻的劃分,但是有幾個地方是需要特別關注的,比如最上層的那幾個部分,音視頻解碼引擎,UI引擎,WebKit瀏覽器核心,核心通訊模組,日誌系統。

         因為音視頻解碼引擎和核心通訊模組只是對於視頻用戶端和P2P通訊特有的,不具有通用性,所以我這裡不做特別介紹。

         首先我們要來重頭介紹一下UI引擎

         所謂的UI引擎就是通常所說的介面庫,對於用戶端產品來說,UI開發佔了很大篇幅,UI的好壞會直接印象使用者的最直觀體驗,因此一個好的介面庫實在是重中之重。

         那麼什麼樣算是好的UI引擎呢?從功能角度說首先配置方便,能快速的修改介面,或者完成介面的重建;其次要有功能豐富的控制項,能夠滿足各種各樣的UI需求。從技術角度說,介面庫的移植性要好,比如繪製層和展現層分離,這樣在跨平台的時候就只需要修改繪製層的代碼,而上層的用戶端UI代碼不需要做太大修改。其次伸縮性,伸縮性好在介面庫本身控制項不夠豐富的情況下可以快速的進行開發新控制項,這裡面就跟物件導向技術有很大關係。再其次,UI介面庫應該有比較好的擴充性,比如在現有控制項不足的情況下,可以直接與平台原生控制項結合,這樣在介面控制項元素缺少的情況下可以快速的利用本平台原生控制項進行彌補。

現在的介面庫發展大致經曆了四個階段

一、最早的用Windows API進行介面開發的階段

這時期的介面相對比較簡單,圖片還用的比較少,軟體結構也不是特別複雜,因而這個階段上介面甚至還談不上獨立出來的引擎,基本和資料層和通訊層是整合在一起的。

在這個階段上,如果你要建立一個視窗,需要調用一大堆的Windows API,需要手動建立訊息迴圈,需要調用諸如CreateWindow這樣的API並進行相應的訊息處理。

二、以MFC、WTL為代表的第二代介面庫

這個階段上由於物件導向技術的發展(主要是C++),Windows平台上出現了像MFC這樣的C++封裝介面庫。它的主要特點是利用了C++的多態,封裝等C++特性,比如把視窗進行封裝,把視窗視作一個對象,對視窗的處理視作施加在視窗類別對象上的行為。雖然引入了物件導向的概念,但是本質上而言,這還是一種用代碼來拼湊介面的辦法,對UI開發人員還是有比較高的要求的。

在這個階段上,如果你要建立一個視窗,相對工作量要少一點,派生兩個類,訊息迴圈已經封裝在裡面,覆蓋它們的虛函數,在裡面做一些初始化操作就可以了。

三、以QT為代表的第三代介面庫

QT使用了一種用QML這種描述性指令碼語言配置介面的辦法,這種開發介面的方法在效率上與前面兩代產品有很大的提高,學習成本也低了很多。

在這個階段上,如果你要建立一個視窗,只需要在QML的編輯器中進行可視化的建立修改就可以了,QT會編譯相應的QML檔案到你的應用程式中,某種程度上說,你甚至不需要懂C++也可以完成介面的基本開發。

四、以XML配置為特徵的第四代介面庫

在Windows平台上,有WPF,Silverlight這樣的技術,也有XUL(FireFox所採用的UI引擎)這樣的介面庫。現在很多的國產介面庫也算作是這種類型,比如最近比較流行的DUILIB。它們的主要特徵是:介面開發與邏輯控制相分離,用XML來配置介面,XML的一個節點一般就是一種控制項,節點上的各個屬性控制控制項的各種特徵,比如位置,圖片等等。而用另外一種語言作為對介面元素處理的邏輯控制,比如XUL用指令碼語言JavaScript,WPF,Silverlight用C#,DUILIB則直接用了C++。

這個階段上,如果你要配置一個視窗可能只需要在XML(WPF和Silverlight是XAML)裡聲明一個元素,比如

<window x=”0” y=”0” width=”400” height=”300” background=”bg.png”></window>

類似於上面這樣的一句簡單描述,就完成了一個位於螢幕左上方(0,0)起始位置,寬度為400,高度為300,背景圖片是bg.png的視窗的配置,注意這裡說的是配置,而不是建立,因為建立需要在UI引擎解析完XML以後才會完成。

 

其實介面庫的發展跟計算軟硬體技術的發展有著很大關係,隨著軟體複用性的提高,UI元素的複用性也在不斷提高。隨著硬體技術的發展,更快的CPU,更大的記憶體,使得我們在做一些以前看上去效率比較低的處理介面的方式也具有相對良好的效能,但是又同時擁有了更好的靈活性。

 

現在的互連網用戶端一般都會有自己的介面庫,也有可能採用一些開源的介面庫自己修改。據我說知QQ用的是自己開發的介面庫,PPS用的是DUILIB,最近翻了一下新出的PC用戶端,裡面居然也有DUILIB的授權檔案,因為介面庫的開發算是用戶端開發裡相對比較有技術含量的東西,因而難度也相對大一點,能流行開的第四代C++介面庫其實並不多,如果大家有興趣可以自行研究。

 

第二篇就到這裡,再往後我要介紹一下Windows介面開發的基礎,就是GDI這個東西,還會簡單介紹一下GDI的常見函數和使用方法,以及常見的坑。

多謝觀賞!

 

Windows用戶端開發簡介(二)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.