將KlayGE嵌入到MFC

2021-08-24 21:19:31 字數 1469 閱讀 2269

說明:

1、klayge是一款國人開發的開源遊戲引擎(以下都是以klayge3.8.0而言,並且假定您已經可以編譯該引擎(具體可以參看readme.html,有一點需要提醒由於klayge使用了動態執行時庫,所以boost都會使用動態庫版本,例如boost::signals, boost::filesystem等,執行時不要忘了相關dll檔案)並且可以執行給定的demo。

2、klayge和ogre都是相當優秀的開源遊戲引擎,個人感覺ogre設計上更為靈活,這是其最值得學習的地方;而klayge則在技巧和技術上有更多可以學習的地方(他的設計也是相當優秀的,至少是我輩望塵莫及的),例如boost庫的大量使用(尤其是boost::signals和boost::python),強大的字型系統(與ogre的字型系統對比一下就知道了),與python的結合等。

3、mfc只是提供了乙個gui框架,還可以有更多的選擇,wx,qt,甚至是.net framework等。

4、本文並沒有完美的實現嵌入,至少klayge自帶的gui系統嵌入後就無法正常使用了。並且由於klayge沒有開放單獨繪製一楨這樣的函式,所以直接關閉程式會有記憶體洩漏和異常。以後再研究研究,試著把相關功能提取一下,做成和ogre一樣的,那樣就可以在onidle()和onpaint()時渲染一楨,在ondestory()時清理資源。

~~~~~~~~~~~~~~~~~~~~~哥不是分界線,是寂寞~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

klayge本身並沒有為嵌入mfc做過考慮(這似乎也是正常的),但是假如我們要做一款編輯器或是其他什麼東東,需要用到這方面的功能。klayge源**的修改是必須的。

klayge工程,window.hpp/cpp,class window 這個類就是乙個視窗,klayge會在建構函式的時候createwindow,而我們所要做的就是建立另乙個建構函式,傳入乙個hwnd,這個建構函式不會createwindow。如下:

window::window(hwnd hwnd, const std::string& strname) window::~window() }

這裡多添了乙個成員變數m_bi***ternal,如果是外部傳入的視窗控制代碼,那麼window在析構的時候就不銷毀視窗。

resloader開始,注意這裡的資源位置要正確,並且klayge的demo中使用的都是.kui .kfx這樣加密成二進位制的檔案。把對應的xml檔案(如 .uiml .fxml)插入到工程中vs會自動編譯的。

好了,一切就緒,編譯……………………等等,怎麼出現一大堆錯誤?

原來是windef.h中的min max巨集定義和std::min std::max衝突了,在有衝突的標頭檔案開頭加入#undef min和#undef max(我加在mathhelper.hpp和elementformat.hpp中)就好了。

將KlayGE嵌入到MFC

說明 1 klayge是一款國人開發的開源遊戲引擎 以下都是以klayge3.8.0而言,並且假定您已經可以編譯該引擎 具體可以參看readme.html,有一點需要提醒由於klayge使用了動態執行時庫,所以boost都會使用動態庫版本,例如boost signals,boost filesyst...

嵌入CEF到MFC程式

公司專案中一直存在著乙個chtmlview模組來顯示url,但是隨著web頁面的更新 加入html5 and 其它一些比較新的技術 越來越發現使用chtmlview已經無法滿足目前的需求。開始還是試著去修改一些東西去滿足當前需要,不過好景不長終於有一天chtmlview連我們目前的web頁面都打不開...

把KlayGE嵌入其他GUI框架

長期以來,klayge一直是單獨執行的,視窗上的ui也都是自己畫。很多人都提到這麼做給編輯器等應用造成了困難。所以如果適度修改klayge的視窗系統,使得klayge可以嵌入其他的gui框架,比如mfc qt wpf等,有些時候會方便得多。第乙個嘗試做這件事情,並且取得成功的在這裡。他通過修改win...