首页 > 其他分享 >认识soui4js(第4篇):定义一个窗口类并显示

认识soui4js(第4篇):定义一个窗口类并显示

时间:2023-07-04 10:46:58浏览次数:42  
标签:窗口 定义 SHostDialog maindlg layout soui4js soui4

soui4js基于soui4设计实现。

首先我们看一下soui4中如何定义一个窗口类。

soui4最基本的窗口类是SHostWnd和SHostDialog,它需要一个布局xml。

假定布局xml在资源包中的位置为:layout:maindlg。

那么soui4中定义一个窗口可以是下面的代码(为了演示方便,这里使用SHostDialog):

SHostDialog dlg("layout:maindlg");
dlg.DoModal(NULL);

在soui4js中,这两个对象被导出为soui4.JsHostWnd, soui4.JsHostDialog。

如果不需要处理窗口消息或者事件,可以使用下面的方法来直接创建窗口:

let dlg = new soui4.JsHostDialog("layout:maindlg");
dlg.DoModal(0);

可以看出来,js的代码和C++代码基本上是一样的。

如果需要处理UI中的事件要如何处理呢?

在C++中,最简单的方法是从SHostDialog继承一个新的对象,然后使用消息或者事件映射表来响应窗口消息及控件的事件。

伪代码如下:

class CDemoDialog : public SHostDialog{
public:
CDemoDialog():SHostDialog("layout:maindlg"){} //.... protected: void OnBtnTest(){ SSLOGI()<<"test button click"; } EVENT_MAP_BEGIN() EVENT_NAME_COMMAND(L"btn_test", OnBtnTest) EVENT_MAP_END() };

EVENT_MAP_BEGIN, EVENT_MAP_END一起构成SHostDialog的事件响应虚函数,从而实现接管事件处理流程。

在js中,用法基本类似:

class OptionDlg extends soui4.JsHostDialog{
    constructor(settings){
        super("layout:maindlg");        
        this.onEvt = this.onEvent;//这一行实现事件处理的接管
    }

        onBtnTest(){
            console.log("test button click");
        }
    onEvent(e){
             //事件处理函数,e是事件对象,可以使用GetID(),Sender()等来获取id及发送者
        let evt_id = e.GetID();
        switch(evt_id){
            case soui4.EVT_CMD:
if(e.NameFrom()=="btn_test") this.onBtnTest(); break; } } }

这样就完成了窗口中事件的处理。

窗口消息处理也类似,只需要设定JsHostDialog.onMsg就可以接管消息处理。

具体代码,参考 https://github.com/soui4js-app/somine

标签:窗口,定义,SHostDialog,maindlg,layout,soui4js,soui4
From: https://www.cnblogs.com/setoutsoft/p/17525036.html

相关文章

  • 图论中的概念与定义
    匹配图的匹配:选出一组边使得每两条边之间没有公共顶点||选出一组边使得每个点最多只与其中一条边相连点覆盖:选出一个点集使得所有的边都和其中至少一个点相连最大独立集:选出一个点集使得任意两点间没有连边特殊の图正则图树相关......
  • 前端Vue自定义精美上下滚动通告栏组件 常用于展示公告信息 上下滚动跑马灯 上下滚动广
    前端Vue自定义精美上下滚动通告栏组件常用于展示公告信息上下滚动跑马灯上下滚动广播,下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13318效果图如下:cc-noticeBar使用方法<!--默认颜色#333公告栏--><viewclass="header">默认颜色......
  • 前端Vue自定义精美悬浮菜单按钮fab button 可设置按钮背景颜色 菜单按钮展开条目
    前端Vue自定义精美悬浮菜单按钮fabbutton可设置按钮背景颜色菜单按钮展开条目,下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13321效果图如下:cc-suspensionMenu使用方法<!--scrollShow:是否显示滑动到顶悬浮按钮 color:悬浮按钮背......
  • 前端Vue自定义精美宫格菜单按钮组件 可设置一行展示个数 可设置成九宫格 十二宫格 十
    前端Vue自定义精美宫格菜单按钮组件可设置一行展示个数可设置成九宫格十二宫格十五宫格,下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13315效果图如下:cc-categoryMenu使用方法<viewclass="header">十五宫格菜单</view><!--推荐宫......
  • .net core 自定义配置文件
    publicvoidConfigureServices(IServiceCollectionservices){varconfigBuilder=newConfigurationBuilder().SetBasePath(Path.Combine(Directory.GetCurrentDirectory(),"Config")).AddJsonFile(&q......
  • 23.define宏定义和const的区别
    编译阶段define是在编译的预处理阶段起作用,而const是在编译、运行的时候起作用安全性define只做替换,不做类型检查和计算,也不求解,容易产生错误,一般最好加上一个大括号包含住全部的内容,要不然很容易出错const常量有数据类型,编译器可以对其进行类型安全检查内存占用define......
  • 13.宏定义和函数有何区别?
    宏在预处理阶段完成替换,之后被替换的文本参与编译,相当于直接插入了代码,运行时不存在函数调用,执行起来更快;函数调用在运行时需要跳转到具体调用函数。宏定义属于在结构中插入代码,没有返回值;函数调用具有返回值。宏定义参数没有类型,不进行类型检查;函数参数具有类型,需要检查类型。......
  • 14.宏定义和typedef区别?
    宏主要用于定义常量及书写复杂的内容;typedef主要用于定义类型别名。宏替换发生在编译阶段之前,属于文本插入替换;typedef是编译的一部分。宏不检查类型;typedef会检查数据类型。宏不是语句,不在在最后加分号;typedef是语句,要加分号标识结束。注意对指针的操作,typedefchar*p_cha......
  • nginx 错误页 指向 自定义页面
    1、安装简易版nginx可参考:https://www.cnblogs.com/fanyann/p/17500960.html以下所有操作均给予上面安装链接的系统版本和软件版本。2、首先,创建你自己的HTML错误页面,例如error.html。3、找到你的nginx.conf,它可能在/usr/local/nginx/conf,/etc/nginx,/usr/local/etc/nginx......
  • C++ 宏定义
    看到一段C++代码,大致是说如果如果定义了RUN_ALL_TESTS就执行下面的代码,遂研究了一下。#ifdefined(RUN_ALL_TESTS)//somecodehere#endif首先RUN_ALL_TESTS是定义的宏:#defineRUN_ALL_TESTS//空字符串#defineRUN_ALL_TESTS1//赋值为1#ifdefined......