给duilib增加脚本支持

来源:互联网 发布:依阿华级战列舰 知乎 编辑:程序博客网 时间:2024/06/15 15:15

  突然心血来潮, 想给duilib增加脚本支持.  那就行动起来吧. 

    使用的脚本是angelscript, 是开源的, 官方网址: http://www.angelcode.com/angelscript/

    布局文件中, 有2种写法.

    第一种 <Script language="cplusplus" include="button.as" />

    第二种, 内嵌脚本。

<Script language="cplusplus" >
void OnControlInit(CControlUI @obj)
{
     obj.SetBkColor(0xFFFF0000);
}
</Script>


    由于内嵌脚本的方式, 又涉及到复杂的xml解析。所以,内嵌脚本的方式不要影响CMarkup解析。

    先举个例子,

    buttom.as的文件内容

void main2(CControlUI @obj)
{
 obj.SetBkColor(0xFF00FF00);
}


如下书写xml布局文件

<?xml version="1.0"?>
<Window size="572,384" sizebox="0,0,8,8" caption="0,0,0,80" equalscale="true">
<Script language="cplusplus" include="button.as">
void OnControlInit(CControlUI @obj)
{
obj.SetBkColor(0xFFFF0000);
}
void main(CControlUI @obj)
{
obj.SetBkColor(0xFF0000FF);
}
</Script>
<VerticalLayout pos="0,0,380,192" bkcolor="0xFFA6CAF0" width="380" height="192" >
<Control pos="38,28,190,155" width="152" height="127" float="true" OnInit="OnControlInit" OnSetFocus="main" OnKillFocus="main2"/>
</VerticalLayout>
</Window>


    脚本一共定义了3个函数: OnControlInit, main, main2,  脚本的入口函数参数固定为 CControlUI @obj, 注意@这个符号表示C++里面的引用。

    实现效果,

    当OnInit时,调用OnControlInit, 设置控件背景色

    当获得焦点时, 调用main, 设置控件背景色

    当失去焦点时, 调用main2,设置控件背景色





原创粉丝点击