Skip to content

AWTK

AWTK简介(AWTK是什么?官网地址、说明)

答:AWTK全称Toolkit AnyWhere,是ZLG开发的开源 GUI 引擎,其详细介绍可前往 AWTK官网 查看。

AWTK的GitHub地址(是否免费、是否开源、开源地址、源码、如何下载)

答:AWTK为开源项目,并且可免费商用,GitHub源码仓库。如果GitHub仓库下载速度较慢,可前往 镜像仓库(Gitee) 下载。

AWTK支持的芯片、操作系统及其示例

答:AWTK支持的桌面操作系统有Windows、Linux和macOS,支持的嵌入式操作系统有AWorksOS、嵌入式Linux、FreeRTOS和RT-Thread等。想进一步了解,AWTK支持的平台与芯片及其示例程序请查阅:awtk_ecology.md

AWTK开发者交流群(技术支持、微信群)

答:欢迎感兴趣的工程师评估和尝试AWTK,如果对AWTK的相关问题有疑惑,可以添加小Z微信(zlgmcu-888)进入AWTK群聊,ZLG研发技术团队亲自为您解答。

AWTK是否有稳定的版本,做正式产品用哪个版本好?

答:AWTK有稳定版本,被称为AWTK SDK整合包,获取SDK整合包有以下两种方式:

方式一,前往 AWTK官网 提供的网盘下载。

方式二,安装AWTK Designer,安装目录下的有SDK整合包。AWTK Designer可前往 AWTK云平台 下载。

AWTK和AWTK SDK整合包的关系是什么,是否能自由搭配使用

答:AWTK通常指AWTK的最基础核心代码,可以到GitHub源码仓库获取。

而AWTK SDK整合包则是将上述的AWTK代码,以及一些常用附加的模块打包到一起,包括嵌入式Linux适配、MVVM组件、扩展控件、炫酷例程等。这些模块都经过了兼容性与稳定性测试,方便用户顺利的使用AWTK各种功能,不需要担心这些模块之间版本兼容性的问题。

因为AWTK升级迭代很快,不同版本的AWTK接口可能有变动,如果用户要单独更新某个模块,我们无法保证这些模块之间的兼容性,使用中可能会出现不可预料的问题。

因此,如果用户不需要使用AWTK其他附加功能,则可以单独到GitHub获取最新AWTK代码;否则我们建议用户使用SDK整合包或安装AWTK Designer。

AWTK SDK整合包和AWTK Designer(AWStudio)的关系是什么,是否能自由搭配使用

答:AWTK Designer是基于某个版本的SDK整合包开发出来的界面设计工具,通常安装AWTK Designer后,安装目录内附带其搭配好的SDK整合包。

AWTK Designer和SDK整合包之间版本存在较强的版本耦合关系,开发应用时不建议自行更换里面的SDK整合包,否则使用中可能会出现不可预料的问题。

同理,您的硬件板卡厂商提供的开发包如果附带了AWTK SDK或AWTK Designer,我们也不建议用户自行更换。如果想使用最新版本的AWTK,可以联系硬件厂家更新他们的开发包,避免AWTK与各个模块以及硬件适配代码的版本出现不兼容的问题。

如何查看AWTK的版本信息?

答:通常获取 AWTK 源码的方式有以下三种:

  1. 下载安装 AWStudio,可从安装目录的 AWTK/SDK 包中获取 AWTK 源码,版本信息(sha)请查看同一目录下的 version.txt 文件。
  2. 从 GitHub 上克隆 AWTK 源码仓库,在仓库目录下打开终端,可执行 git log 命令查看当前仓库的版本信息(sha)。
  3. 在 AWTK 的 GitHub仓库 页面中点击"Code"->"Download ZIP"按钮下载源码压缩包,该方式无法查询,只能自行记录下载时的版本信息(sha)。

打开AWTK_API.chm显示空白

答:在AWTK_API.chm文件的右键菜单中点击"属性" ,弹出属性对话框,勾选"解除锁定",点击确定按钮,再重新打开AWTK_API.chm文件即可。

AWTK的Visual Studio(MSVC)工程(怎么用VS打开AWTK源码)

答:AWTK提供一个基于CMake的Visual Studio工程 awtk-msvc,可以参考其中的README.md文档搭建环境并生成VS工程。

AWTK内存中的颜色格式布局(大小端)

答:AWTK 为了提高内存拷贝速度,内部所有颜色格式布局都是小端内存排序,例如 AWTK 的 lcd_t 类型颜色格式为 RGBA,fb 中的内存布局由低位往高位的顺序是 R,G,B,A。

需要注意的是,一般大众认知屏幕颜色格式通常是大端布局,与 AWTK 内存中颜色格式的高低位顺序相反,在移植 LCD 时需要注意转换。

如何设置屏幕旋转(LCD旋转)

答:设置LCD旋转的方法可以参考设置LCD旋转

需要注意的是,AWTK的旋转功能采用软件旋转图像实现,在嵌入式平台设置LCD旋转对于性能影响非常大,除非支持硬件加速,否则建议不要使用旋转功能。

怎么设置窗口全屏?

答:可以调用window_set_fullscreen()函数设置窗口全屏,设置后AWTK会自动重绘窗口区域。

如何获取LCD的分辨率(大小)?

答:在AWTK中,可以通过窗口画布获取LCD的大小,代码如下:

c
/* 获取窗口画布对象 */
canvas_t* canvas =(canvas_t*)widget_get_prop_pointer(window_manager(),
                                                    WIDGET_PROP_CANVAS);
wh_t lcd_w = canvas_get_width(canvas); /* 获取LCD的宽 */
wh_t lcd_h = canvas_get_height(canvas); /* 获取LCD的高 */

启用和关闭屏保(如何使用屏保、屏幕保护)

答:调用window_manager_set_screen_saver_time()函数可设置屏保定时器的时间,当时间为0时,屏保关闭,否则屏保开启。具体说明及示例代码请参考:screen_saver.md

怎么获取鼠标的X、Y坐标?

答:AWTK在主消息循环中不断捕捉鼠标事件,将其分发给输入状态设备管理器,输入状态设备管理器进行处理后,再分发给窗口管理器。因此通过窗口管理器,即可获取鼠标的X、Y坐标,代码如下:

c
int32_t x = window_manager_get_pointer_x(window_manager()); /*获取鼠标X坐标 */
int32_t y = window_manager_get_pointer_y(window_manager()); /*获取鼠标Y坐标 */

在嵌入式Linux中出现触摸不灵敏的现象怎么解决?

答:在嵌入式Linux平台中,如果出现驱动设备异常的情况,比如屏幕显示异常、触摸失灵、键盘或鼠标设备响应异常等,这通常是由于在awtk-linux-fb/awtk-port/main_loop_linux.c中设置的设备驱动文件不正确导致的,设置驱动文件的代码如下,建议开发者通过hexdump命令找到系统中正确的设备驱动文件名,比如"hexdump/dev/input/xx"。

c
/* awtk-linux-fb/awtk-port/main_loop_linux.c */
#define FB_DEVICE_FILENAME "/dev/fb0" /* 屏幕显示设备文件名 */
#define TS_DEVICE_FILENAME "/dev/input/event0" /* 触摸设备文件名 */
#define KB_DEVICE_FILENAME "/dev/input/event1" /* 键盘设备文件名 */
#define MICE_DEVICE_FILENAME "/dev/input/mouse0" /* 鼠标设备文件名*/

例如,在某些嵌入式Linux系统中,设置鼠标驱动文件为"/dev/input/mice"会出现触摸失灵或异常的现象,设置代码如下:

c
/* awtk-linux-fb/awtk-port/ main_loop_linux.c */
#define MICE_DEVICE_FILENAME "/dev/input/mice"

在终端中输入以下命令,发现按下触摸屏或操作鼠标都会打印信息,即该驱动文件会同时接收触摸和鼠标事件,导致触摸失灵或异常。

bash
hexdump /dev/input/mice

找到异常原因后,再通过hexdump命令寻找正确的设备驱动文件名。

嵌入式Linux中出现输入设备异常怎么排查(触摸、鼠标、键盘)?

答:此处以触摸(tslib)异常为例,出现设备异常时的排查步骤如下,其他输入设备的排查方式类似:

步骤一:首先确保触摸设备驱动文件能正常捕获触摸消息,通常可使用hexdump命令来查看设备信息,检查触摸的坐标和状态。

c
/* awtk-linux-fb/awtk-port/main_loop_linux.c */
/* 比如这里可以用 hexdump 命令打印以下设备驱动文件中的信息  */
#define TS_DEVICE_FILENAME "/dev/input/event0" /* 触摸设备文件名 */

步骤二:确认设备驱动文件输出的信息正常后,可以检查 awtk-linux-fb 中处理设备信息的线程是否正常工作,比如触摸线程的代码位于awtk-port/input_thread/tslib_thread.c文件中,调试线程回调函数tslib_run()即可。

处理设备信息的线程主要负责以下工作:

  1. 不断读取设备驱动文件中相关信息;
  2. 将这些信息转化为AWTK支持的事件消息;
  3. 将设备事件分发到GUI主循环。

用户可逐步排查设备线程中的以上功能是否正常。

调用函数widget-set-style-color(label, text_color, 0x000000)不能正常显示黑色

答:uint32_t类型的颜色参数0x000000中缺少透明度信息,颜色参数总共有8位,最高的2位表示透明度,后6位置分别表示BGR(蓝色、绿色、红色),此处应在颜色参数的高位处加入透明度信息,比如黑色为0xFF000000、红色为0xFF0000FF。

透明度信息取值范围用16进制来表示是00~FF,00为完全透明,FF为完全不透明。

如何实现控件的半透明效果?

答:在AWTK应用程序中实现半透明效果有以下三种方式:

  • 在样式(style)中,设置颜色时使用rgba格式可以指定半透明的填充颜色,比如设置bg_color为半透明的红色,代码如下,其中rgba格式颜色的最后一个参数表示透明度,取值范围在0到1之间,0为全透明,1为不透明。
xml
<normal bg_color="rgba(255,0,0,0.5)" />
  • 设置图片半透明。在制作图片时,使用PNG格式,保留alpha通道。
  • 设置整个控件(包括子控件)半透明。调用widget_set_opacity函数,设置控件的透明度。

如何设置某类控件的字体?

答:若想要指定某类控件的字体,只需设置该控件样式中的"font_name"属性即可,比如设置label控件的default样式使用test.ttf字体,在样式文件(.xml)中的代码如下:

xml
<label>
  <style name="default" font_name="test">
    <normal text_color="#444444"/>
    <disable text_color="#44444466"/>
  </style>
</label>

如何在代码中动态地修改控件的样式?(比如背景色、背景图片)

答:AWTK中的样式分为公共样式和私有样式,公共样式即预定义的style,写在样式文件中,比如default.xml;私有样式则直接写在UI文件中,被称为inline style,二者在源文件中修改的方式如下:

(1)在源文件中,可以调用widget_use_style()函数设置样式文件中存在的控件样式,例如,default.xml中存在button控件的"combobox_down"样式,设置该样式的代码如下:

c
widget_t* btn = button_create(win, 10, 10, 80, 30);
//设置buttomn控件使用combobox_down样式
widget_use_style(btn, "combobox_down");

(2)在源文件中,可以调用下表中的函数动态修改控件的私有样式属性。

函数名称说明
widget_set_style设置控件私有样式
widget_set_style_int设置整数类型的style
widget_set_style_str设置字符串类型的style

示例代码如下:

c
value_t value;
value_set_str(&value, "yellow");
//设置button控件正常状态下的字体颜色
widget_set_style(button, "normal:text_color", &value); 
//设置button控件的字体大小为 24
widget_set_style_int(button, "font_size", 24); 
//设置button控件被按下时的背景色
widget_set_style_str(button, "pressed:bg_color", "red"); 
//设置button控件正常状态下的背景色
widget_set_style_color(button, "normal:bg_color", 0xff0000ff);

inline style的更多内容请参考《AWTK开发实践》中的"3.2.6 inline style动态修改控件样式"章节。

如何在代码中切换主题样式?

答:AWTK支持多主题功能,默认以多主题的方式使用项目资源,并且可以在代码中实时切换,只需调用项目目录下res/assets.inc中的assets_set_global_theme()函数即可。

AWTK中char和wchar类型之间的转换

答:AWTK为char和wchar_t类型之间的转化提供utf8_t接口,接口函数如下:

函数名称说明
tk_utf8_from_utf16把UTF-16格式字符串转换成UTF-8字符串
tk_utf8_from_utf16_ex把指定长度的UTF-16格式字符串转换成UTF-8字符串
tk_utf8_to_utf16将UTF-8字符串转换成UTF-16格式字符串

函数具体用法请查阅AWTK_API手册。

AWTK中的多字节字符集与Unicode编码转换接口(GBK和UTF8之间的转换)

答:AWTK提供多字节字符集与Unicode编码转换接口encoding_t,接口函数如下:

函数名称说明
encoding_convert字符集转换
encoding_gbk_to_utf8将gbk转换成utf8编码
encoding_utf8_to_gbk将utf8转换成gbk编码

使用字符集转换接口的注意事项和示例代码请参考:charset/README.md

AWTK是否支持多国语言图片翻译?(怎么使用)

答:AWTK支持多国语言图片翻译,只需在图片名称中包含"$locale$"即可,切换不同语言时,AWTK会自动将"$locale$"替换为当前语言,具体使用方法请参考《AWTK开发实践》中的"8.4 图片翻译"章节。

如何设置当前的语言环境?

答:可以调用locale_info_change()函数设置AWTK应用程序当前的语言环境。

AWTK多国语言互译,不能正常显示韩文、拉丁文?

答:在AWTK中使用多国语言互译功能,若无法正常显示某些国家的语言,比如韩文、拉丁文等,通常是由于字库(.ttf文件)中没有这些字符,请将该语言的字库添加到项目资源目录下(比如design/default/fonts),命名为"default.ttf",并打包资源。

怎么修改默认字库?

答:AWTK应用程序通常存在默认字库(default.ttf),可调用system_info_set_default_font()函数设置默认字库或者找一个".ttf"格式的字库放在 design/default/fonts 目录下,并重命名为"default.ttf",作为程序的默认字库。

支持文件系统,怎么读取SD卡或者TF卡中的图片?(加载外部资源)

答:支持文件系统时,读取SD卡或者TF卡中的图片有以下两种方式:

(1)可以将图片放到项目res对应目录中,例如res/assets/default/raw/images/xx,在应用程序中使用该图片(比如绘制image控件中的图片)时,AWTK会自动加载,并且可以通过图片名直接获取bitmap_t对象,例如myimage.jpg放到res对应目录中,加载图片代码如下:

c
bitmap_t bitmap;
widget_load_image(widget, "myimage", &bitmap);

(2)如果图片不在res文件夹中,而是在系统的其他的路径中,通过图片文件名调用widget_load_image()函数从文件系统中加载图片,图片文件名为"file://+图片路径",例如从文件系统中加载图片myimage.jpg,代码如下:

c
bitmap_t bitmap;
widget_load_image(widget, "file://C:\myimage.jpg", &bitmap);

更多关于加载外部资源的内容请查阅 如何加载外部图片和字体

如何释放图片缓存?

答:image_manager_unload_unused()函数用于从图片管理器中卸载指定时间内没有使用图片,该函数通常在应用程序RAM不足时调用,用来释放图片缓存。需要注意的是被卸载的图片其缓存会被清除,下次使用这些图片的时候需要重新解码,导致程序运行变慢。

终端提示:!!!Asset [name=xxx type=image] not exist!!!

答:AWTK应用程序运行时,终端提示类似"!!!Asset [name=xxx type=image] not exist!!!"的警告,表示AWTK在绘制GUI界面时,获取xxx图片失败,原因有以下两种:

(1)该图片资源不存在,请确保UI文件和样式文件中设置的图片存在且文件名称正确,例如此处图片名称为xxx,确认无误后,请重新打包资源。

(2)应用程序中使用了图片翻译功能,即图片名称中包含"$locale$",例如图片名称为"language_$locale$",切换en_US语言时,AWTK会按照以下顺序自动查找并加载图片:language_en_US、language_en、language_。在这个过程中,可能会提示这个警告。

AWTK是否支持显示摄像头视频?(怎么显示摄像头视频)

答:AWTK支持显示视频或摄像头数据,可以使用mutable_image控件将视频数据绘制到界面上,具体用法请参考:how_to_use_mutable_image.md

如何关闭log-debug打印的调试信息?

答:在应用程序初始化时,调用log_set_log_level()函数设置打印信息的级别,例如设置打印级别为ERROR,即只打印宏log_error输出的信息,代码如下:

c
log_set_log_level(LOG_LEVEL_ERROR); /*参数具体含义请查阅log_level_t接口 */

终端提示:STBTT does not support .ttf of type MS symbol!

答:stb 不支持解析 MS symbol 类型的矢量字库,该类型的字库缺少 Unicode 编码与字符图元的索引表数据,导致 stb 无法正确检索到对应的字形,请使用 Unicode 编码类型的矢量字库。

此外,可以安装 FontCreator 软件进一步确认矢量字库中是否存在 Unicode 编码与字符图元的索引表。使用 FontCreator 打开矢量字库文件,如果存在索引表,则如下图所示:

AWTK程序无法显示矢量字体或显示异常时,该怎么排查?

答:AWTK 应用程序无法显示矢量字体或显示异常主要可能由以下两个原因造成:

  1. 矢量字体文件中没有对应的字符。
  2. 矢量字体文件缺少部分索引表信息,导致 stb 库无法解析出对应的字模。

首先,可以借助一些工具来验证矢量字体中是否有对应的字符,比如 FontCreator、FontForge 等这些工具都可以。

如果矢量字体中存在字符但仍然无法显示,则可以在代码中进一步验证 stb 库能否正常解析出对应字符的字模,AWTK会调用 font_get_glyph() 函数解析字模,在该函数中下断点逐步调试即可找到问题所在。

如何设置AWTK解码图片时,缓存位图的颜色格式?

AWTK 默认将所有图片解码为 RBGA8888 格式的位图,并提供了以下宏定义来设置解码位图的颜色格式:

宏定义不透明图片解码为透明图片解码为
缺省宏定义RBGA8888RBGA8888
WITH_BITMAP_BGR565BGR565无影响
WITH_BITMAP_RGB565RGB565无影响
WITH_BITMAP_BGR888BGR888无影响
WITH_BITMAP_RGB888RGB888无影响
WITH_BITMAP_BGRA无影响BGRA8888
  1. 如果 AWTK 解码图片的颜色格式和 LCD 的颜色格式一致,那么像素点在显示时就不需要做颜色转换,可以提高渲染图片的效率。
  2. AWTK 在绘图的时候会自动检测是否需要颜色转化,就算不定义这些宏或者随便定义宏也可以正常显示,只是效率变低而已

在嵌入式Linux上出现画面撕裂怎么办(如何在嵌入式Linux中开启垂直同步)?

答:画面撕裂简单理解就是上一帧的内容还没显示完就开始显示下一帧的内容,导致的结果就是画面呈现到一半,上面的跟下面的画面完全对不上,产生撕裂感。

垂直同步是解决画面撕裂最常用的技术,其原理就是等上一帧画面显示完毕后,再显示下一帧画面,显示前后两帧画面的过程通常使用 Swap 交换两块显存的地址来实现,因此垂直同步的前提条件是至少有两个 fb 大小的显存(即所谓的双fb)。

在AWTK针对arm-linux平台的移植层 awtk-linux-fb 中,基于 FrameBuffer 实现的 LCD 默认开启了垂直同步功能,代码如下:

c
/* awtk-linux-fb/awtk-port/lcd_linux/lcd_linux_fb.c */
#define __FB_WAIT_VSYNC    1

因此,只需保证嵌入式Linux平台有两个或以上 fb 大小的显存即可开启垂直同步功能。在一般的Linux平台上,执行 fbset 命令即可查看并修改 fb 驱动的详细信息,详见下文。

查看 fb 驱动的详细信息:

bash
fbset

设置双 fb 只需将 LCD 的虚拟高度设置为实际分辨率的两倍即可,比如此处将分辨率 800 * 600(16位色)的 LCD 设置为双 fb:

bash
fbset -g 800 600 800 1200 16

更多关于 fbset 命令的用法可以自行上网搜索。

备注:fbset 命令并非通用,部分 Linux 平台的驱动可能不支持设置双 fb,并且在某些特殊的 Linux 平台,可能需要用其他方法设置 LCD 显存,需根据实际情况操作。

在AWTK中如何操作bitmap位图(比如缩放、旋转等)?

答:AWTK本身不支持直接操作 bitamp,但可以将 bitmap 对象放到离线画布 canvas_offline 中,通过调用 vgcanvas 和 canvas 的相关接口进行操作,操作完成后再将数据回传到内存中即可,相关示例可参考:demo_canvas_offline.c

终端提示:locale_info_tr:62 condition(locale_info->strs != NULL) failed!

答:AWTK 应用程序运行时,打印该警告主要是由于程序中使用了多国语言翻译功能(tr_text),但又没有在项目资源的 default/strings/strings.xml 中添加对应语言的文本,导致 AWTK 在翻译时找不到指定文本,从而打印警告,因此,想要解决该问题只需在 strings.xml 中添加对应语言的文本即可。

备注:在 AWTK Designer 中,可以在上方导航栏中切换到"项目"选项卡,点击"翻译"按钮,打开并编辑 strings.xml 文件。

当应用画面出现残影(残留图像)时,该怎么处理?

答:应用画面出现残影通常是由于窗口背景色为透明导致的,如果需要窗口背景透明来做多图层融合则可以参考这个文档中的方法:how_to_use_mutable_image.md,定义宏 WITH_LCD_CLEAR_ALPHA,让 AWTK 支持刷新透明区域的机制以及支持背景色为透明的混合算法。

备注:

  1. 该方法需要满足前提条件:AWTK 的 lcd 类型必须是 32 位色的(RGBA 或 BGRA)。
  2. 该方法的原理是在绘图之前对脏矩形区域刷一层全透明的颜色,并在绘制时开启背景色为透明的混合算法,因此定义宏 WITH_LCD_CLEAR_ALPHA 会降低 AWTK 绘制的性能。

如何修改并设置AWTK应用程序在Windows下图标资源?

答:AWTK 内置了 Windows 下图标资源(awtk/win32_res/awtk.res),修改图标资源方法详见同一目录下的 README.md 文档,另外也可以通过 awtk_config.py 脚本指定对应的图标资源,代码如下:

py
# awtk_config.py
......
WIN32_AWTK_RES = 'win32_res/awtk.res'         ## 指定 Windows x64 平台下的图标资源
if TARGET_ARCH == 'x86':
    WIN32_AWTK_RES = 'win32_res/awtk_x86.res' ## 指定 Windows x86 平台下的图标资源
......

AWTK支持字体加粗、斜体、下划线等功能吗?

答:AWTK 不支持字体加粗、斜体、下划线等功能,如有对应需求可以通过添加多个字体文件解决。

移植 LCD 时如果颜色异常该怎么处理?

答:如果移植 LCD 时发现颜色异常,可以先从以下两个角度排查:

  1. 确认移植层中创建的 lcd_t 对象与 LCD 硬件的颜色格式是否一致。
  2. 如果颜色格式一致,请确认 LCD 硬件数据是否为小端模式。AWTK 内部默认使用小端模式处理数据,如果 LCD 硬件数据为大端模式,则需要在 flush 函数中自行转换。

答:如果编译时定义了宏 WITH_FONT_STB 开启 STB 矢量字体解码功能,在某些硬件平台上,如果在非 JLink Debug 模式下运行,程序会跑飞。这是由于 STB 库中调用了 printf 函数导致的,可以修改 stb/stb_truetype.h 文件中的宏 STBTT_printf,代码如下:

c
#define STBTT_printf(x) 0

如何在 AWTK 程序中获取图片资源?

答:如果用户需要在代码中对图片资源进行操作,可以调用 widget_load_image 接口获取图片资源,该接口的声明如下:

c
/**
 * @method widget_load_image
 * 加载图片。
 * 返回的bitmap对象只在当前调用有效,请不保存对bitmap对象的引用。
 *
 * @param {widget_t*} widget 控件对象。
 * @param {const char*}  name 图片名(不带扩展名)。
 * @param {bitmap_t*} bitmap 返回图片对象。
 *
 * @return {ret_t} 返回RET_OK表示成功,否则表示失败。
 */
ret_t widget_load_image(widget_t* widget, const char* name, bitmap_t* bitmap);

/* 示例 */
bitmap_t bitmap;
/* 此处获取到的bitmap对象即为所需的图片资源 */
widget_load_image(widget, "image_name", &bitmap);

AWTK 支持哪些 svg 规则?

答:支持 SVGTiny1.1 标准,参考 https://www.w3.org/TR/SVGTiny ,其中部分特性不支持,部分特性提供额外支持,支持的规则的详细内容请参考:https://github.com/zlgopen/awtk/blob/master/src/svg/README.md。

如何自定义资源加载方式?

答:如果 AWTK 默认的资源加载方式无法满足需求,例如在无文件系统的嵌入式平台上使用外扩 Flash 来存储资源,可以自定义资源的加载方式,AWTK 加载资源时会优先调用用户自定义的加载方式,具体实现请参考:如何自定义加载资源方式

在 PC 平台上,如何获取 SDL 窗口句柄进行操作?

答:在 PC 平台上,SDL 的窗口句柄保存在 AWTK 的原生窗口 native_window_t 对象中,可以访问 handle 成员,并将其强转为 SDL 的窗口句柄,示例代码如下:

c
/* 通过窗口上的任意控件获取原生窗口对象 */
native_window_t* native_window = widget_get_native_window(widget); 

/* 访问原生窗口的 handle 成员,并将其强转为 SDL 的窗口句柄  */
SDL_Window* sdl_window = (SDL_Window*)native_window->handle;