Sciter教程系列-02 分析sdk/demos/uminimal例程
上一个教程中建立窗口的代码在不同操作系统中并不通用,
uminimal例程窗口实现中并不包含特定于操作系统的代码,适用于Windows/MacOS/Linux系统中的应用,并且该例程展示了脚本如何调用本地(C++)代码。
编译demos/uminimal例程
将文件sdk/demos/uminimal/uminimal.cpp和sdk/include/sciter-win-main.cpp拷贝到解决方案下的src/文件夹,在VS中移除筛选器src下的所有文件,然后添加这两个文件。拷贝sdk/demos/uminimal/res/文件夹,覆盖解决方案下的res文件夹。运行打包脚本,在VS中编译C++代码并运行,结果如下图所示。

注意,本文所使用的系统是Windows,所以拷贝的是sciter-win-main.cpp,对应的MacOS应拷贝sciter-osx-main.mm,Linux应拷贝sciter-gtk-main.cpp(只在Windows系统下验证过)。
分析C++代码
先看看窗口构建的流程。在uminimal.cpp中,定义了一个frame类,继承自父类sciter::window,父类中关于窗口创建、窗口最小化/最大化/关闭、消息代理/响应函数以及构造函数均在sciter-win-main.cpp中实现,同时,该文件还实现了入口函数wWinMain,在入口函数中,将消息循环以函数对象形式传递给uimain函数,该函数实现在uminimal.cpp中。在uimain函数中,实例化了一个frame对象,调用了资源文件加载以及窗口显示方法,最终将上图所示窗口显示出来。
除了窗口构建流程和minimal例程有差异,本例程还出现了SOM_PASSPORT_BEGIN/SOM_PASSPORT_END这个新的宏,这是用于暴露C++函数给脚本代码调用的。
SOM(Sciter Object Model)
Sciter对象模型,主要用于在以下三个方面通过本地代码(C++代码)扩展Sciter。
- 脚本访问本地代码的命名空间、方法以及类。
- 自定义的Sciter窗口。
- 自定义本地DOM元素。
1、脚本访问本地代码的命名空间、方法以及类
为了达到脚本访问本地代码的对象或命名空间,需要做以下两件事:
- 在本地代码中定义继承自
sciter::om::asset<T>的类。这是为了使得对象可以进行引用计数,保证脚本在引用该对象时对象不会被释放。 - 在宏定义
SOM_PASSPORT_BEGIN/END中通过SOM_FUNCS将方法或者属性暴露给脚本,使得脚本可以调用这些暴露的本地方法。
uminimal例程中的NativeMath类定义如下。
struct NativeMath : public sciter::om::asset<NativeMath

本文详细介绍了SciterSDK中的uminimal示例,涵盖了跨平台窗口实现、C++代码与脚本交互、SOM_PASSPORT用于暴露本地功能,以及TIScript语言的应用,展示了如何在Sciter环境中构建通用应用程序。
最低0.47元/天 解锁文章
2032

被折叠的 条评论
为什么被折叠?



