本文发布于 2020-03-28, 最后更新于 2342 天前,其中的信息可能已经有所发展或是发生改变。

文章摘要

问题的诞生 问题大概是这么诞生的的: sciter库自带丰富的tiscript函数足以满足前端的大部分需求,然而我还是希望一些前端的事件能够使用C++中的函数来处理 这就需要前后端进行交互,大致就是将前端的按钮单击事件绑定到C++函数中 sciter库已经为我们准备了方法进行绑定 然而.... 正题(踩坑) sciter库提供了丰富的示例代码,其中库里的window类能够快速地创建窗口 然而我确进…

问题的诞生

问题大概是这么诞生的的:

sciter库自带丰富的tiscript函数足以满足前端的大部分需求,然而我还是希望一些前端的事件能够使用C++中的函数来处理

这就需要前后端进行交互,大致就是将前端的按钮单击事件绑定到C++函数中

sciter库已经为我们准备了方法进行绑定

然而....

正题(踩坑)

sciter库提供了丰富的示例代码,其中库里的window类能够快速地创建窗口

然而我确进入了一个误区

网上的大部分教程都是使用类似于以下的代码进行事件绑定

C++中

text
BEGIN_FUNCTION_MAP FUNCTION_0("tis脚本中使用的函数名", C++文件中的函数名); END_FUNCTION_MAP

然后在定义一个和上面函数名一样的函数

Tiscript中

text
$(绑定的控件).onclick = function(){ view.刚才在C++中定义的函数(); }

绑定有很多种方式,这里再给出一种方式

text
event click $(绑定的控件){ view.刚才在C++中定义的函数(); }

然后我理所当然的改写sciter库中window类的相关定义,测试的时候debug窗口报了以下错误

原来我在窗口创建完成之前就进行了控件绑定 我这是在试图绑定幽灵控件啊

填坑

OK,修补代码,示例代码中有一个继承了window类的子类frame

实际上就是我程序的主窗口,这种继承风格有点像MFC,MFC中的窗口类也会继承父窗口类,例如我有一个窗口类叫HelloWorld,在MFC里他就可能继承CDialog、CWnd或者其他父窗口类

不难知道在C++中,父类先初始化,然后再是子类,那我们把绑定过程放在子类里不就行了,它会在子类创建完窗口后调用绑定函数的部分。

试试修补之后的代码

完美运行!

这就是我踩坑和填坑的全过程了

九仞之行

严于律己,宽以待人,深自警省,讷言敏行

订阅
💬 评论 (0)

还没有评论呢 ~ 快来抢沙发吧 🛋️

编辑器加载中…