Sciter:加载资源的几种方式

来源:互联网 发布:淘宝客如意投佣金比例 编辑:程序博客网 时间:2024/06/05 09:29

本地方式

SciterLoadFile(hWnd, LR"(file:\\D:\Demo\index.html)");
加载本地文件需要在路径前面加上"file:\\",并且最好使用绝对路径,否则可能会因为路径问题引起资源无法加载。

这样的方式最简单直接,修改UI后无须重新打包,但缺点的是会将资源文件暴露出来,且文件较多。


ZIP方式

SciterLoadFile(hWnd, LR"(file:\\D:\Demo\ui.zip)");
相比加载本地html的方式,zip的好处就是不会在磁盘产生过多文件,资源都集中在一个压缩文件中,不过也同样的存在资源暴露的问题。

详情参考:http://sciter.com/zip-resource-packaging-in-sciter


网络方式

SciterLoadFile(hWnd, LR"(http://www.baidu.com/ui.zip)");
同以上两种方式一样,只是搬到网络上了。好处是可以在服务端更新UI,这样客户端永远都是最新的UI,跟做Web一样。坏处是网络不好的话会影响体验。


PE资源方式

SciterLoadFile(hWnd, L"res:index.html");
引用PE资源是sciter sdk中提供的一种便利的机制(引用资源的地方用前缀"res:"),它的处理逻辑在sciter::host::on_load_data方法中,这个方法是可以覆盖的,也就是说我们完全可以自定义这个前缀。

在把资源添加到程序中时,resource.h会产生一个资源ID,类似

#define IDR_HTML1 101
我们不能直接用数字ID,要改成字符串(不要加引号)

#define IDR_HTML1 INDEX

这样就能使用“SciterLoadFile(hWnd, L"res:index.html");”去加载资源文件了。

使用PE资源的方式就不会在磁盘上产生文件了,使得程序更绿色,分发更容易。不过用户还是能通过PE文件编辑工具(如ResourceHacker)提取UI资源。


BLOB方式

sciter sdk提供了一个工具packfolder.exe。它可以将一个文件夹下的资源都压缩并输出为一个字节数组。程序中引用这个字节数组即可。这样的方式很好地隐藏了资源文件,但每次修改UI后都要重新执行命令打包,所以只建议在程序发布时采用。


第一个参数是需要打包的文件夹路径,第二个参数是输出文件。

在引用资源之前调用sciter::archive绑定已经打包好了的资源,当通过SC_LOAD_DATA请求这些资源时,sciter::archive就会提供。

sciter::archive::instance().open(aux::elements_of(resources));SciterLoadFile(hWnd, L"this://app/index.html");

这种方式需要使用"this://app/"前缀,同样,它也是在sciter::host::on_load_data中处理的。

0 0
原创粉丝点击