文章目录
AWTK
1.环境搭建
reference:
AWTK的参考文档docs
2.目录结构
-
bin/
- cfg.conf 数据保存至此
- lcdgui.exe 可直接查看修改结果,图形界面显示
-
design/
-
default
- strings
- ui 大量XML文件,可由AWTK Designer绘制生成XML文件
-
design
-
-
lib/ 库文件目录
-
res/ 资源文件目录
- raw 原始资源文件目录
- inc 修改生成的资源文件目录
-
scripts/
-
src/
- base 底层代码,一般无需修改
- ext 通用API和辅助代码
- user 每个界面的业务逻辑,例如每个界面所需的操作,通过创建.c .h文件完成
-
test/ 单元测试目录
-
cp_res.sh
-
project.json 项目配置文件
-
Sconstruct Scons脚本
-
web.json
3.常用命令
- 自动生成对应的xml文件(src目录下)该部分可以使用python脚本设计,进行json文件自动生成xml文件,方便创建UI XML文件。
4.重点详解
4.1控件
reference: reference: 《AWTK开发实践》4
AWTK 四大基本控件:窗口、基本控件、通用容器和扩展控件
这个不需要记,只是要清楚这些都是基于widget而衍生的,即widget_t为其基类,所以都可以称之为控件。
可去查看widget_t类的设计
4.1.1通用基础控件类型
4.1.2控件函数
reference: 《AWTK开发实践》4.2.4
- widget_lookup()查找控件
- widget_set_text_utf8设置文本内容
- widget_get_prop获取控件指定属性的值
- widget_use_style更新样式
4.1.3窗口
reference:《AWTK开发实践》4.3 4.4
window_manager对各个窗口进行集中管理
-
window 缺省的应用程序窗口,占用除system_bar_t之外的整个区域。
-
dialog 对话框
-
system_bar 一般设计为LCD顶部区域(独占),用来显示当前的标题和关闭按钮等
注:其在第一个应用程序窗口之前打开
-
popup 弹出窗口 (区别于对话框)
4.2JOSN
描述界面的主体信息
GUI可以直接设计,然后生成XML文件
或者也可以采取JSON文件编写,然后自动生成XML文件(毕竟XML文件编码有点“啰嗦”)
案例讲解
-
窗口window
-
title 界面标题
-
fscript 可c函数调用
-
-
子选项child (结点样式)
-
node 结点名字
-
type 控件类型
-
等等
-
-
按键
4.3事件处理机制
reference:
《event_listener.md》
《AWTK开发实践》
- 基础控件都有自己的通用事件
- 界面业务逻辑的操作事件
4.3.1机制流程
触发事件,事件分发,捕获事件,实现功能。
-
触发事件,指的是用户相应的操作(键盘或者鼠标)
支持的事件有(详情可见AWTK开发手册):
global_key_up、global_key_down、global_key_long_press、key_up、key_down、key_long_press、key_down_before_children、key_up_before_children、pointer_up、pointer_down、pointer_move、click、timer、window_close、window_open、window_will_open、value_changed、focus、blur、value_changed_by_ui
-
事件分发 常用widget_dispatch分发事件
- widget_dispatch 单控件,只能用于GUI线程
- main_loop_queue_event 非GUI线程(可用于多线程)
- idle_queue或timer_queue 多线程 (最佳选择)
-
捕获事件 用widget_on注册事件(其中有与之对应的回调函数)对应QT里面的信号与槽,实质就是GUI设计中的对事件处理的必要手段,详情可见《Linux程序设计》16
-
widget_lookup 查找控件
//该函数的功能为查找指定名称的子控件 widget_t *widget_lookup(widget_t* widget, const char * name,bool_t recursive); /** widget 控件对象 name 子控件的名称 recursive 是否递归查找全部子控件 */
-
widget_on 注册事件
//该函数的功能为注册指定事件的处理函数。事件的处理函数可以由自己设定,也可以使用通用的操作函数。 uint32_t widget_on(widget_t* widget, event_type_t type, event_func_t on_event, void* ctx); /** widget 控件对象 type 事件类型 on_event 事件处理函数 ctx 事件处理函数上下文 */
-
-
处理函数 可以设计其注册的事件处理函数
- ret_t 处理函数的返回值的类型
4.3.2事件类型
reference:
《AWTK开发实践》3.5.4
**event_type_t **类型常量定义EVT_…
- 键盘事件
- 鼠标事件
- 控件事件
5.代码阅读
reference: 《AWTK开发实践》
详情可见AWTK的官网文档,或者下载AWTK后目录文档中也十分详细,不理解的函数使用可以翻阅手册。
如有错误,感谢指正,特此记录,删减许多,避免侵权,侵权必删。