stm32 TouchGFX基础教程(九)自定义容器

(自定义容器如何用简单的方法向外传输消息将在进阶教程里展示)
自定义容器是可以通过聚合现有控件而构成新控件的一种方法,比如当我们需要点击一个按钮就弹出对话框,虽然标准控件是有对话框,但我们也可以用自定义容器构建一个。Touchgfx会自动判断自定义容器的哪些部分需要刷新,哪些部分不需要所以能保持非常好的性能。
接下来就是对话框的例子。
1、放一个box控件充当背景,再添加一个按钮,并添加一个点击交互:
stm32 TouchGFX基础教程(九)自定义容器_第1张图片
2、在Custom Container中拖动控件构建如下界面:
stm32 TouchGFX基础教程(九)自定义容器_第2张图片
3、在标准控件栏最下面出现了刚才做的自定义容器,可以直接拖到屏幕上,然后把Visible取消勾选:
stm32 TouchGFX基础教程(九)自定义容器_第3张图片
4、生成代码用VS打开,并在Screen1View类中添加添加callDialog函数的定义和实现,代码如下:
stm32 TouchGFX基础教程(九)自定义容器_第4张图片
stm32 TouchGFX基础教程(九)自定义容器_第5张图片
5、点击运行进行仿真,会发现点击Close窗口没有任何反应,有同学可能会想到我们在touchgfx designer里没有为Close添加任何交互,那就回去添加一个呗,但是添加交互的下拉栏里就没有提供Close让我们选择。stm32 TouchGFX基础教程(九)自定义容器_第6张图片
这时,我们只能在自定义容器类中采用回调函数的方式给Close添加点击事件处理函数:
stm32 TouchGFX基础教程(九)自定义容器_第7张图片

touchgfx::Callback<CustomContainer1, const touchgfx::AbstractButton&> onMyButtonClicked;

这一句是创建一个Callback实例,它的实际作用是个包装器 (wrapper) ,把回调处理函数包装在这个类里面,然后这个实例被当成参数传给setAction()函数,这样,回调处理函数就注册到了自定义容器里的按钮上。接下来实现处理函数:
stm32 TouchGFX基础教程(九)自定义容器_第8张图片
现在Close能正常起作用了:stm32 TouchGFX基础教程(九)自定义容器_第9张图片
但是这样做有个弊端,那就是回调处理函数因为作用域的问题无法处理自定义容器外部的控件,为了解决这个问题,可以再用一个Callback作为包装器,自定义容器里的处理函数里调用execute()函数,并开放一个方法用来在容器外部设置这个包装器。
大家要是对这个感兴趣我再补充。

-------------------------------下面是我的小广告----------------------------------------------
在这里插入图片描述
淘宝小店:芯视界touchgfx

你可能感兴趣的:(stm32,touchgfx)