本文发布于1756天前,最后更新于 1756 天前,其中的信息可能已经有所发展或是发生改变。
问题的诞生
问题大概是这么诞生的的:
sciter库自带丰富的tiscript函数足以满足前端的大部分需求,然而我还是希望一些前端的事件能够使用C++中的函数来处理
这就需要前后端进行交互,大致就是将前端的按钮单击事件绑定到C++函数中
sciter库已经为我们准备了方法进行绑定
然而....
正题(踩坑)
sciter库提供了丰富的示例代码,其中库里的window类能够快速地创建窗口
然而我确进入了一个误区
网上的大部分教程都是使用类似于以下的代码进行事件绑定
C++中
BEGIN_FUNCTION_MAP
FUNCTION_0("tis脚本中使用的函数名", C++文件中的函数名);
END_FUNCTION_MAP
然后在定义一个和上面函数名一样的函数
Tiscript中
$(绑定的控件).onclick = function(){
view.刚才在C++中定义的函数();
}
绑定有很多种方式,这里再给出一种方式
event click $(绑定的控件){
view.刚才在C++中定义的函数();
}
然后我理所当然的改写sciter库中window类的相关定义,测试的时候debug窗口报了以下错误
原来我在窗口创建完成之前就进行了控件绑定 我这是在试图绑定幽灵控件啊
填坑
OK,修补代码,示例代码中有一个继承了window类的子类frame
实际上就是我程序的主窗口,这种继承风格有点像MFC,MFC中的窗口类也会继承父窗口类,例如我有一个窗口类叫HelloWorld,在MFC里他就可能继承CDialog、CWnd或者其他父窗口类
不难知道在C++中,父类先初始化,然后再是子类,那我们把绑定过程放在子类里不就行了,它会在子类创建完窗口后调用绑定函数的部分。
试试修补之后的代码
完美运行!
这就是我踩坑和填坑的全过程了