Sciter教程_01_分析minimal例程

本文介绍了如何在SciterSDK的minimal例程中编译并运行,涉及文件加载、窗口创建、消息循环以及资源文件从内存、res目录和archive的加载。作者详细解释了WinMain函数和SciterCallback的作用,并展示了如何通过回调函数处理不同类型的文件加载请求。

Sciter教程系列-01 分析sdk/demos/minimal例程

编译demos/minimal例程

上一个教程已经搭建好工程运行起来了,现在将VS项目中src目录下的源码文件移除(不是删除),然后将$(SciterSDK)/demos/minimal/minimal.cpp拷贝到src/并添加到VS工程中。编译运行,将会得到如下结果。

在这里插入图片描述

控制台提示无法加载bin/minimal.htm文件,显然代码中指定了加载此文件,但是本地磁盘没有该文件。为了显示本地文件,将res/main.htm拷贝到bin/目录下,将代码中的minimal.htm改为main.htm,再次编译运行即可看到本地的文件被加载成功并显示出来。

接下来分析minimal.cpp中的代码。

程序入口WinMain

代码使用win32-api创建了一个窗口并加载本地.htm资源文件,有关程序入口WinMain的描述见WinMain function

在这个程序入口函数里,主要完成两件事,通过sciter加载文件、创建窗口并建立消息循环。

1、sciter加载文件。sciter可以通过回调函数使得用户可以自定义文件加载的方式。如下代码中,函数SciterCallback实现中分发了系列回调事件,其中就包括了加载文件的回调函数,当SciterLoadFile加载文件时,执行的其实是自定义的加载文件回调函数DoLoadData。而在DoLoadData中,将根据指定的资源文件路径的字符串格式来区分资源从内存导入、从res/导入、从resources.cpp导入或者是从绝对路径导入。

::SciterSetCallback(wnd,&SciterCallback,NULL);
::SciterLoadFile(wnd, GetAbsolutePath());

示例中使用了指定绝对路径导入资源文件的方式。

2、创建窗口并建立消息循环。这里使用的都是win32-api,具体函数用法可参考Programming reference for the Win32 API。创建窗口消息循环相关可参考Creating a Message Loop

HWND wnd = ::CreateWindowEx(
		0, /*WS_EX_LAYOUTRTL,*/
		::SciterClassName(),
		L"Minimal Sciter Application",
		WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT, 0,
		800, 600,
		0,0,0,0);

::ShowWindow(wnd, SW_SHOWNORMAL);

MSG msg;
while( ::IsWindow(wnd) && GetMessage(&msg, 0, 0, 0) )
{
   
   
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}

资源文件改为从resources.cpp加载

按照上一个教程中资源文件路径指定的方式,修改main.htm的路径。编译运行,发现窗口正确显示了,但是资源文件未加载。

// ::SciterLoadFile(wnd, GetAbsolutePath());
::SciterLoadFile(wnd, WSTR("this://app/main.htm"));

调试发现,在DoLoadData中,分支代码的::SciterDataReady并未被执行,具体来说,是sciter::archive::instance().get()方法没有取到所需的资源数据。对比上一个教程的代码可以看到,其中有加载resources.cpp数据的动作,而resources.cpp又是使用打包脚本打包资源文件得到的,加上以下两行代码,再编译运行,可以看到资源文件成功加载。

#include "resources.cpp"
sciter::archive::instance()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值