本文共 5210 字,大约阅读时间需要 17 分钟。
最近看了一下chrome UI 学习笔记(),觉得chrome的ui架构不错,将很多基本控件进行了封装,这样写出来的ui就可以运行在windows,linux,mac机上,但其比qt和wxwidget轻量化,应该可以抽离出来,单独来作为一个简易的图形库。另外,chrome对多语言和皮肤等处理都很值得参考。在这里面学到了一个技巧是,设置完cygwin的环境后就可以在bat里面运行linux的相关命令了():
:: 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这个文件,同时参考,经过几次尝试后总算跑起来了,下面就说一下对应的代码:
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 macrosOleInitialize(NULL);
运行的结果如图:
为了方便大家自己搭建,现给出完整的测试代码:
转载地址:http://zmiob.baihongyu.com/