运行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);
运行的结果如图:
为了方便大家自己搭建,现给出完整的测试代码:
更多推荐
所有评论(0)