C++在使用sciter UI库时踩过的坑
本文发布于1489天前,最后更新于 1488 天前,其中的信息可能已经有所发展或是发生改变。

问题的诞生

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

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++中,父类先初始化,然后再是子类,那我们把绑定过程放在子类里不就行了,它会在子类创建完窗口后调用绑定函数的部分。

试试修补之后的代码

完美运行!

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

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
Source: https://github.com/zhaoolee/ChineseBQB
Source: https://github.com/zhaoolee/ChineseBQB
Source: https://github.com/zhaoolee/ChineseBQB
颜文字
Emoji
小恐龙
花!
滑稽大佬
演奏
程序员专属
上一篇
下一篇