[Sciter] 资源引用

方式一. 加载外部文件
方式二. 加载内存
方式三. 加载程序内置资源
1. 在加载资源之前先调用
2 导入资源文件
3 使用资源
方式3:加载BLOB资源

方式一. 加载外部文件

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">
时间: 2024-12-14 23:45:37

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

.Net 转战 Android 4.4 日常笔记--资源引用(4)

我们知道资源被注册到R.java我们通过R.java就可以读取到界面中的组件.跟我们.net一样,通过ID来读取组件 知识点: 通过R.java读取组件 MainActivity.java通过findViewById方法查找组件 在Layout中用@string查找字符串,这个跟我们MVC中国际化基本相识,通过xml这种资源引用进行中文和英文切换 加入中文和英文本地化 双击fragment_main.xml设计视图,拖入一个Button和一个TextView,并双击进入xml代码 添加andro

Android见招拆招五:XML匹配问题、XML资源引用的必要性

The processing instruction target matching "[xX][mM][lL]" is not allowed. 问题描述 原因及解决方法 XML第一行没有写而直接写了第二行,XML前面空行或者有空格都会导致匹配错误. [I18N] Hardcoded string "3", should use @string resource 问题描述 原因及解决方法 android:text="123313" 直接写也能正

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

@代表引用资源 @*代表引用系统的非public资源,如: @*android:color/white @[package:]type/name引用自定义资源,如: android:text="@string/hello" ?代表引用主题属性 android:textColor="?android:textDisabledColor" @+代表在创建或引用资源 @+id/资源ID名 新建一个资源ID Android:安卓资源引用符号的含义

ResourceDictionary 和 XAML 资源引用

XAML 定义应用的 UI,并且 XAML 也可以定义 XAML 中的资源.资源通常是对你希望多次使用的某些对象的定义.你要为 XAML 资源定义一个键,以供将来引用,该键的作用类似于资源的名称.你可以在整个应用中或从应用中的任意 XAML 页面引用资源.Windows 运行时 XAML 具有一个 ResourceDictionary 元素,你可以在其中定义你的资源.然后可使用 StaticResource 标记扩展或 ThemeResource 标记扩展来引用你的资源. 你最希望声明为 XAM

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

在wpf的XAML的Window.Resources中,一个资源引用另外一个资源,出现如下错误: “错误 1 “{DependencyProperty.UnsetValue}”不是 Setter 上“System.Windows.FrameworkElement.FocusVisualStyle”属性的有效值”. 如下图: 虽然错误列表里出现如图的错误,但是程序缺依然可以运行,只是在设计器里看不了UI视图(界面). 出现这个错误的原因是: 被引用的资源的声明在引用它的资源的后面了(或者是没有声明

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

ENC的概念: The application component environment is referred to as the ENC, the enterprise naming context. 应用组件的业务逻辑应该是 ENC中取得对象.组件提供者使用标准的部署描述符指定必需的ENC入口.这些ENC入口是运行时组件所依赖的资源等信息. 一个应用组件实例使用 JNDI定位ENC.ENC的标准JNDI CONTEXT是:java;/comp/env // Obtain the appl

赵雅智_Android的getResources()资源引用

今天做一个Android的刮刮乐项目.里面用到非常多的地方用到了getResources. <span style="font-size:12px;"> // 获得图片 //參数1:res是资源的引用,參数2:id是图片的id after = BitmapFactory.decodeResource(getResources(), R.drawable.b); before = BitmapFactory.decodeResource(getResources(), R.d

WPF中的资源引用心得

1.引用内部资源: <ImageBrush ImageSource="pack://application:,,,/FFK.Styles;component/images/tabout.png"></ImageBrush> 2.引用指定目录资源 <ImageBrush ImageSource="pack://SiteOfOrigin:,,,/images/tabout.png"></ImageBrush> 3.资源类型

04项目的目录结构分析与资源引用

普通字符串资源: 布局资源: 案例: main.xml: <TextView android:id="@+id/textView1" android:layout_width="match_parent" android:layout_height="240dp" android:text="加油吧!少年!" /> <Button android:id="@+id/button1" and