运行chrome ui

最近看了一下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);

运行的结果如图:

image

为了方便大家自己搭建,现给出完整的测试代码:

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章