最近看了一下chrome UI 學習筆記(http://blog.chinaunix.net/u2/76055/showart.php?id=2093274),覺得chrome的ui架構不錯,將很多基本控件進行了封裝,這樣寫出來的ui就可以運行在windows,linux,mac機上,但其比qt和wxwidget輕量化,應該可以抽離出來,單獨來作爲一個簡易的圖形庫。另外,chrome對多語言和皮膚等處理都很值得參考。在這裏面學到了一個技巧是,設置完cygwin的環境後就可以在bat裏面運行linux的相關命令了(http://www.oschina.net/code/explore/chromium.r67069/chrome/tools/build/win/version.bat):
:: Put cygwin in the path
call %SolutionDir%/../third_party/cygwin/setup_env.bat
:: Load version digits as environment variables
cat %SolutionDir%/VERSION | sed "s//(.*/)/set /1/" > %VarsBat%
看完了chrome UI 學習筆記,就想自己搭建環境來跑跑相關的例子,但將pdf的例子拷貝下來後,設置好編譯環境,編過去了,卻發現運行不起來。根據中斷點的地方,可以看出是相關環境沒有初始化,但該初始化那些環境呢?網上也有人問,作者的回答是:
1.多個線程的啓動和綁定
2.PathService初始化
3.資源文件初始化
4.國際化判斷和加載
5.如果在Windows 平臺下,需要初始化的一些關於wtl和com的模塊。
但該怎麼樣初始化作者沒講?看來只能自己去找了。參考d:/project/chrome/src/src/chrome/app/chrome_dll_main.cc這個文件,同時參考http://xjchilli.blog.163.com/blog/static/453477392010612111245425/,經過幾次嘗試後總算跑起來了,下面就說一下對應的代碼:
1.多個線程的啓動和綁定 可以不需要
2.PathService初始化
app::RegisterPathProvider();
3 4.資源文件初始化和國際化判斷和加載
bool icu_result = icu_util::Initialize();
std::string app_locale = ResourceBundle::InitSharedInstance("en-US");
5.如果在Windows 平臺下,需要初始化的一些關於wtl和com的模塊。
#define _WTL_USE_CSTRING
#include // base ATL classes
#include // base WTL classes
extern CAppModule _Module; // WTL version of CComModule
#include // ATL GUI classes
#include // WTL frame window classes
#include // WTL utility classes like CString
#include // WTL enhanced msg map macros
OleInitialize(NULL);
運行的結果如圖:
爲了方便大家自己搭建,現給出完整的測試代碼: