http://www.cnblogs.com/yinxufeng/p/fb343eecda564aa63bce0bdf15709ddf.html

方式一. 加载外部文件

SciterLoadFile (HWINDOW hWndSciter, LPCWSTR filename)有两个参数:

  1. hWndSciter:Sciter程序窗口句柄
  2. filename:文件路径/资源路径
  1. ::SciterLoadFile(wnd, L"default.htm");

这里的default.htm就是一个外部文件,程序运行的时候会在当前路径下寻找并加载该文件

方式二. 加载内存

SciterLoadHtml (HWINDOW hWndSciter, LPCBYTE html, UINT htmlSize, LPCWSTR baseUrl)

方式三. 加载程序内置资源

还是通过SciterLoadFile来加载,但是需要借助辅助函数。

1. 在加载资源之前先调用

  1. ::SciterSetCallback(wnd, &SciterCallback, NULL);

SciterCallback是一个回调函数,接收Sciter所有通知。

  1. UINT SC_CALLBACK SciterCallback(LPSCITER_CALLBACK_NOTIFICATION pns, LPVOID callbackParam)
  2. {
  3. // here are all notifiactions
  4. switch (pns->code)
  5. {
  6. case SC_LOAD_DATA: return DoLoadData((LPSCN_LOAD_DATA)pns);
  7. }
  8. return 0;
  9. }

SC_LOAD_DATA:就是资源请求通知,处理该通知来获取资源数据

  1. UINT DoLoadData(LPSCN_LOAD_DATA pnmld)
  2. {
  3. LPCBYTE pb = 0; UINT cb = 0;
  4. aux::wchars wu = aux::chars_of(pnmld->uri);
  5. if (wu.like(WSTR("res:*")))
  6. {
  7. // then by calling possibly overloaded load_resource_data method
  8. if (sciter::load_resource_data(ghInstance, wu.start + 4, pb, cb))
  9. ::SciterDataReady(pnmld->hwnd, pnmld->uri, pb, cb);
  10. }
  11. else if (wu.like(WSTR("this://app/*"))) {
  12. // try to get them from archive (if any, you need to call sciter::archive::open() first)
  13. aux::bytes adata = sciter::archive::instance().get(wu.start + 11);
  14. if (adata.length)
  15. ::SciterDataReady(pnmld->hwnd, pnmld->uri, adata.start, adata.length);
  16. }
  17. return LOAD_OK;
  18. }

DoLoadData:是SDK里面封装好的函数,可以加载两种类型资源:

  1. 以“res:”开头,此类资源就是针对的程序内置资源
  2. 以“this://app/”开头,此类资源是下面要介绍的另外一种SDK自带的blob资源类型

2 导入资源文件



注意:资源ID要用字符串

3 使用资源

  1. // CPP
  2. ::SciterLoadFile(wnd, L"res:default.htm");
  3. // html
  4. <img src="res:go.png">

注意:res后面的文件名一定要跟ID(字符串DEFAULT)值一样,而不是要跟实际的文件名default2.html一样

方式3:加载BLOB资源

前提跟上面一样,要处理SC_LOAD_DATA资源请求通知,并且也已经在DoLoadData函数中实现。

那么,接下来要做的怎么生成BLOB资源

  1. 将所有资源统一放在项目的res文件夹下

  2. 调用sciter-sdk/bin/packfolder.exe将/res/文件夹下面的内容压缩到resources.cpp

  3. resources.cpp就包含了来自/res/文件夹中的所有资源,并且被压缩成了无符号的字符型 resources[] = { …}; 对应为BOLB类型的资源

  4. 包含resources.cpp

  1. #include "resources.cpp"

5.在引用资源之前调用sciter:archive实体绑定已经打包好了的资源BLOB对象. 当通过SC_LOAD_DATA标识请求这些资源时,sciter::archive实体就会提供

  1. // bind resources[] (defined in "resources.cpp") with the archive
  2. sciter::archive::instance().open(aux::elements_of(resources));

6.使用资源

  1. //cpp: 通过"this://app/"方式加载
  2. ::SciterLoadFile(wnd, L"this://app/default.htm");
  3. //html: html自己的引用方式
  4. <img src="go.png">

[Sciter] 资源引用的更多相关文章

  1. ResourceDictionary 和 XAML 资源引用

    XAML 定义应用的 UI,并且 XAML 也可以定义 XAML 中的资源.资源通常是对你希望多次使用的某些对象的定义.你要为 XAML 资源定义一个键,以供将来引用,该键的作用类似于资源的名称.你可 ...

  2. wpf资源嵌套,一个资源引用另外一个资源,被引用的资源应该声明在前面

    在wpf的XAML的Window.Resources中,一个资源引用另外一个资源,出现如下错误: “错误 1 “{DependencyProperty.UnsetValue}”不是 Setter 上“ ...

  3. 详解JNDI的lookup资源引用java:/comp/env

    ENC的概念:     The application component environment is referred to as the ENC, the enterprise naming c ...

  4. (转)[Unity3D]BuildPipeline.PushAssetDependencies 打包依赖包,优化UI Prefab的资源引用加载(坑爹之处)

    转自:http://blog.csdn.net/chiuan/article/details/39040421#reply 1:长话短说,UI Prefab中一般会交叉引用Atlas,那么打包时候我们 ...

  5. 详解JNDI的lookup资源引用 java:/comp/env

    ENC的概念:     The application component environment is referred to as the ENC, the enterprise naming c ...

  6. UWP入门(六)-- ResourceDictionary 和 XAML 资源引用

    原文:UWP入门(六)-- ResourceDictionary 和 XAML 资源引用 你最希望声明为 XAML 资源的 XAML 元素包括 Style.ControlTemplate.动画组件和 ...

  7. Android的基本资源引用(字符串、颜色、尺寸、数组)【转】

    感谢大佬:https://blog.csdn.net/wenge1477/article/details/81295763 Android的基本资源引用(字符串.颜色.尺寸.数组)[转] 一.Andr ...

  8. WPF中资源引用方式汇总

    在WPF应用程序开发中,总是难以记住各种访问资源的方法,遂逐一记下. 先从资源是否编译到程序集分类 一.程序集资源 资源在编译的时候嵌入到程序集中.WPF中的XAML会被编译为BAML,图片等其他资源 ...

  9. Android:安卓资源引用符号的含义

    @代表引用资源 @*代表引用系统的非public资源,如: @*android:color/white @[package:]type/name引用自定义资源,如: android:text=&quo ...

随机推荐

  1. mysql5.7 在Centeros 6 下自动安装的shell脚本

    概述: 此脚本实现了在Centeros 6版本下自动安装mysql5.7到目录 /opt/mysql-5.7*并且做软连接映射到 /usr/local/mysql,自动修改root密码为:123456 ...

  2. 25. TABLESPACES , 26. TABLE_CONSTRAINTS , 27. TABLE_PRIVILEGES

    25. TABLESPACES TABLESPACES表提供有关活动MySQL Cluster表空间的信息. TABLESPACES表有以下列: TABLESPACE_NAME :表空间名称 ENGI ...

  3. 文本三剑客之grep

    接受正则表达式,按行匹配,将会过滤出匹配的所有行 格式: grep   [OPTION]...     PATTERN    [FILE]... 可以看出,grep后可以同时接多个文件 选项OPTIO ...

  4. 【JDBC-MVC模式】开发实例

    JDBC - 开发实例-MVC模式  1. 在web.xml中配置连接数据库的信息 web.xml: <context-param> <param-name>server< ...

  5. 南邮CTF--bypass again

    南邮CTF--bypass again 提示:依旧弱类型,来源hctf 解析: 源代码: if (isset($_GET['a']) and isset($_GET['b'])) {​ if ($_G ...

  6. Python中的函数(4)

    一.传递列表 你经常会发现,向函数传递列表很有用,这种列表包含的可能是名字.数字或者更复杂的对象(如字典). 将列表传递给函数后,函数就能直接访问其内容. 栗子:假设有一个用户列表,我们要和其中每一位 ...

  7. Ubuntu16.04进入无限登录状态的解决办法

    具体来说就是,输入密码之后又到了登录界面,无限循环(也许可能不能输入密码,这种状态我没有测试) 此方案仅适用于安装过NVIDIA显卡驱动的系统并且在登录界面会发现分辨率变了 如果你没有安装过NVIDI ...

  8. laravel(4.2) +Zizaco

    操作步骤:https://github.com/Zizaco/entrust/tree/1.0 这篇博客说的蛮详细的:http://blog.boolw.com/?p=241 简化后的步骤 1.在根项 ...

  9. Vue微信自定义分享时安卓系统config:ok,ios系统config:invalid signature签名错误,或者安卓和ios二次分享时均config:ok但是分享无效的解决办法

    简述需求:要求指定页面可以进行微信自定义分享(自定义标题,描述,图片,链接),剩下的页面隐藏所有基础接口.二次分享依然可以正常使用,切换至其他页面也可以正常进行自定义分享. 这两天在做微信自定义分享的 ...

  10. 【三种负载均衡器的优缺点】LVS Nginx HAProxy

    搭建负载均衡高可用环境相对简单,主要是要理解其中原理.此文描述了三种负载均衡器的优缺点,以便在实际的生产应用中,按需求取舍. 目前,在线上环境中应用较多的负载均衡器硬件有F5 BIG-IP,软件有LV ...