[Sciter] 资源引用
方式二. 加载内存
方式三. 加载程序内置资源
1. 在加载资源之前先调用
2 导入资源文件
3 使用资源
方式3:加载BLOB资源
方式一. 加载外部文件
SciterLoadFile (HWINDOW hWndSciter, LPCWSTR filename)有两个参数:
- hWndSciter:Sciter程序窗口句柄
- filename:文件路径/资源路径
::SciterLoadFile(wnd, L"default.htm");
这里的default.htm就是一个外部文件,程序运行的时候会在当前路径下寻找并加载该文件
方式二. 加载内存
SciterLoadHtml (HWINDOW hWndSciter, LPCBYTE html, UINT htmlSize, LPCWSTR baseUrl)
方式三. 加载程序内置资源
还是通过SciterLoadFile来加载,但是需要借助辅助函数。
1. 在加载资源之前先调用
::SciterSetCallback(wnd, &SciterCallback, NULL);
SciterCallback是一个回调函数,接收Sciter所有通知。
UINT SC_CALLBACK SciterCallback(LPSCITER_CALLBACK_NOTIFICATION pns, LPVOID callbackParam)
{
// here are all notifiactions
switch (pns->code)
{
case SC_LOAD_DATA: return DoLoadData((LPSCN_LOAD_DATA)pns);
}
return 0;
}
SC_LOAD_DATA:就是资源请求通知,处理该通知来获取资源数据
UINT DoLoadData(LPSCN_LOAD_DATA pnmld)
{
LPCBYTE pb = 0; UINT cb = 0;
aux::wchars wu = aux::chars_of(pnmld->uri);
if (wu.like(WSTR("res:*")))
{
// then by calling possibly overloaded load_resource_data method
if (sciter::load_resource_data(ghInstance, wu.start + 4, pb, cb))
::SciterDataReady(pnmld->hwnd, pnmld->uri, pb, cb);
}
else if (wu.like(WSTR("this://app/*"))) {
// try to get them from archive (if any, you need to call sciter::archive::open() first)
aux::bytes adata = sciter::archive::instance().get(wu.start + 11);
if (adata.length)
::SciterDataReady(pnmld->hwnd, pnmld->uri, adata.start, adata.length);
}
return LOAD_OK;
}
DoLoadData:是SDK里面封装好的函数,可以加载两种类型资源:
- 以“res:”开头,此类资源就是针对的程序内置资源
- 以“this://app/”开头,此类资源是下面要介绍的另外一种SDK自带的blob资源类型
2 导入资源文件
注意:资源ID要用字符串
3 使用资源
// CPP
::SciterLoadFile(wnd, L"res:default.htm");
// html
<img src="res:go.png">
注意:res后面的文件名一定要跟ID(字符串DEFAULT)值一样,而不是要跟实际的文件名default2.html一样
方式3:加载BLOB资源
前提跟上面一样,要处理SC_LOAD_DATA资源请求通知,并且也已经在DoLoadData函数中实现。
那么,接下来要做的怎么生成BLOB资源
将所有资源统一放在项目的res文件夹下
调用sciter-sdk/bin/packfolder.exe将/res/文件夹下面的内容压缩到resources.cpp
resources.cpp就包含了来自/res/文件夹中的所有资源,并且被压缩成了无符号的字符型 resources[] = { …}; 对应为BOLB类型的资源
包含resources.cpp
#include "resources.cpp"
5.在引用资源之前调用sciter:archive实体绑定已经打包好了的资源BLOB对象. 当通过SC_LOAD_DATA标识请求这些资源时,sciter::archive实体就会提供
// bind resources[] (defined in "resources.cpp") with the archive
sciter::archive::instance().open(aux::elements_of(resources));
6.使用资源
//cpp: 通过"this://app/"方式加载
::SciterLoadFile(wnd, L"this://app/default.htm");
//html: html自己的引用方式
<img src="go.png">
转载于:https://www.cnblogs.com/yinxufeng/p/fb343eecda564aa63bce0bdf15709ddf.html
[Sciter] 资源引用相关推荐
- 【Android 安装包优化】开启资源压缩 ( 资源压缩配置 | 启用严格模式的资源引用检查 | 自定义保留/移除资源配置 | 资源压缩效果 )
文章目录 一.开启资源压缩 二.启用严格模式的资源引用检查 三.自定义保留/移除资源配置 四.资源压缩效果 五.完整配置 1.keep.xml 配置 2.build.gradle 构建脚本 六.参考资 ...
- 【Android 应用开发】Android 工程修改包名流程 ( 修改 applicationId | 修改 package | 修改 R 资源引用 | 修改 BuildConfig 引用 )
文章目录 一. Android 工程修改包名流程 二. 修改 applicationId 三. 修改 package 包名 四. AndroidManifest.xml 清单文件组件 五. 修改 R ...
- android 资源引用 自定义标题栏
http://blog.sina.com.cn/s/blog_72fad6270100x7k2.html styles.xml放在res/values文件夹中 具体放在哪里,这要深入了解android ...
- wpf资源嵌套,一个资源引用另外一个资源,被引用的资源应该声明在前面
在wpf的XAML的Window.Resources中,一个资源引用另外一个资源,出现如下错误: "错误 1 "{DependencyProperty.UnsetValue}&qu ...
- 关于WPF的资源引用问题
WPF的资源引用大致有下面几个点需要讨论,下面我们逐个讨论. 目录 Pack Uri方案 资源文件Pack Uri 本地程序集资源 引用程序集资源 内容文件 Pack Uri 源站点 Pack Uri ...
- Unreal资源引用(一)
Unreal Engine4提供了多种机制,用来控制资源引用并加载到内存中.资源引用有两种方式:直接引用(Hard Reference)指A引用B,当加载A时会自动加载B:间接引用(Soft Refe ...
- SpringBoot页面跳转访问css、js等静态资源引用无效解决
SpringBoot页面跳转访问css.js等静态资源引用无效解决 原文链接:https://blog.csdn.net/qq_41647999/article/details/83788265 目录 ...
- resource_bundles resources封装独立库时资源引用方式探讨
1.资源文件引用的方式 CocoaPods 两种资源文件引用的方式--resource_bundles & resources 1-1.resource_bundles resource_bu ...
- 魔幻一般的WPF URI资源引用
wpf,可以通过URI引用资源,比如图片,xaml,音频等. 如果原来是有html的基础知识,可以用起来会比较方便,比较容易理解. 但是也有可能因为有了html的基础知识因为惯性思维导致无法理解. W ...
最新文章
- 调整ViewState的位置,让你的asp.net页面对搜索引擎更友好
- intel服务器主板芯片,英特尔® 服务器主板 S2600CW2SR
- JavaWeb+SVN+Maven+Tomcat +jenkins实现自动化部署
- spring的HibernateDaoSupport以及HibernateTemplate和jdbcTemplate的选择问题
- 【Tools】Visual Studio 2010下载和安装
- leetcode python3 简单题66. Plus One
- 特斯拉全自动驾驶硬件发布!马斯克明年推RoboTaxi:傻瓜才用激光雷达
- jquery 验证email
- 基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - ActiveXForm在线体验安全设置...
- 制作自己的MVC框架(一)——简单粗暴的实现
- 【TWVRP】基于matalb蚁群算法求解带时间窗的车辆路径规划问题【含Matlab源码 775期】
- python人脸检测与微信小程序_微信小程序人脸识别功能
- “任期”已近20年,这个AI训练工具有点儿问题
- 如何利用COOC生成动态排名变化利器可识别的数据格式
- 《阿里云前端技术周刊》第二期
- 常用地理坐标系统和投影坐标系统
- 模块度计算python代码_转:模块度(Modularity)与Fast Newman算法讲解与代码实现
- 行业分析报告-全球与中国客户调查软件市场现状及未来发展趋势
- 扫码枪(条码枪)v1.0可以实现无焦点捕获扫码输入,并可上传数据到服务器
- [Code+#4]最短路 (最短路)
热门文章
- docker启动nginx代理不上_用 docker-compose 启动 nginx, network 为 host, nginx 无法启动是怎么回事?...
- linux清理缓存_自动清理linux系统内存和Cache方法
- 因分辨率变化html页面布局跳动_Web前端页面设计流程及注意事项,谨记!
- python3.7怎么用_Python 3.7.0 来了!
- 网站用户的生命周期价值
- 小程序影藏溢出的gif_Win10即将推出GIF录制编辑工具,不再需要第三方软件了
- 系统学习机器学习之增强学习(五)--马尔可夫决策过程策略TD求解(SARSA)
- 前景检测算法(十二)--基于模糊Choquet积分
- hashmap扩容_面试官问:HashMap在并发情况下为什么造成死循环?一脸懵
- TCP模块的断开操作