天天看點

将webkit核心封裝為duilib的浏覽器控件

轉載請說明出處,謝謝~~

         原本的duilib是自帶浏覽器控件的,但是使用了IE核心,我在做仿酷狗音樂播放器時,在右側樂庫要用到浏覽器控件,而我使用自帶的IE控件卻發現了不少缺點,這也是duilib一直沒有解決的,程式設計群裡的朋友也反映IE控件不好用。而目前最常用的浏覽器核心一個是IE核心,另一個是webkit核心。

            先簡單介紹一下這個webkit核心

Apple 的 iPhone, Nokia’s Series 60 browser 等所使用的 Browser 核心引擎,都是基于 WebKit。

WebKit是開源的Web浏覽器引擎,蘋果的Safari、谷歌的Chrome浏覽器都是基于這個架構來開發的。WebKit 還支援移動裝置和手機,包括iPhone和Android手機都是使用WebKit做為浏覽器的核心。 

            可以看到webkit的前景非常不錯,谷歌和蘋果的各個産品,包括現在流行的安卓和IOS系統,他們的浏覽器都才用webkit核心,大有取代IE核心的意思。而且webkit是開源免費的!

            昨天我在網上搜尋了webkit的相關産品,先是著名的cef,下載下傳下來以後發現他編譯後40M大,功能很強大,當然用起來比較複雜,查閱了相關資料,嘗試封裝了一下,但是發現難度較大。而且40M對于我這樣隻為了顯示網頁的需求來說太大了。如果是為了專門制作個浏覽器,那麼使用cef是很不錯的。

            然後我下載下傳EAWebkit,這個核心是基于webkit的精簡封裝,編譯後隻有3M大,用起來簡單,但是和群裡的朋友交流後得知這個核心不穩定,還存在較多bug,是以我也果斷放棄了。

            最後四方打聽,知道了這個wke核心,這個核心是國人BlzFans釋出的開源免費核心,一個相當好的代碼,在此先感謝BlzFans的工作!

            這個wke核心是為了在3D遊戲中嵌入網頁和flash而開發的,支援最新的HTML5和CSS3技術,相容性和速度都不錯。

            今天花了一上午把這個核心封裝為了duilib的浏覽器控件,效果如下。 

将webkit核心封裝為duilib的浏覽器控件
将webkit核心封裝為duilib的浏覽器控件

            封裝起來還是挺順利的,有自帶的win32demo,了解了他的工作過程,使用這個核心很簡單,一個頭檔案,一個庫檔案,一個dll,隻有這個3個檔案。我在duilib裡,仿照了CRichEditUI的封裝過程。制作了CWkeWebkitUI控件作為浏覽器控件。這個CWkeWebkitU控件繼承了CControlUI控件,來更好的相容duilib,然後在控件内部我封裝了CWkeWebkitWnd類,CWkeWebkitU控件初始化時會建立CWkeWebkitWnd類,這個CWkeWebkitWnd類會使用Createwindow函數先建立一個子窗體,并且使用了WS_VISIBLE

| WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN樣式,WS_CHILD讓這個建立的窗體成為主窗體的子窗體,然後添加WS_CLIPSIBLINGS | WS_CLIPCHILDREN樣式,這兩個樣式很關鍵,他可以讓主窗體重新整理時不去重新整理子窗體,否則不加這個樣式,就會因為主窗體頻繁的重新整理導緻浏覽器控件的卡頓。解決了核心問題,然後就是處理webkit核心的消息,仿照了原代的demo,我把各個消息處理後,就封裝好了這個控件,并且增加了幾個簡單的接口來友善外部的調用。

            結束,休息一下~~

2014.7.25  15:50  Redrain

繼續閱讀