硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1462|回复: 8
收起左侧

[ThreadX全家桶] GUIX的代码风格有什么玄机

[复制链接]

24

主题

122

回帖

194

积分

初级会员

积分
194
发表于 2022-1-30 08:36:57 | 显示全部楼层 |阅读模式
GUIX很强大,强大到虽然例程大致能看懂,但迟迟不敢动手的程度。举个简单例子。下面这段代码实现了从文本框取数,赋值给list组件的selected选项。


static void set_selected_index()
{
    GX_SINGLE_LINE_TEXT_INPUT *input;
    GX_CHAR *input_string;
    int string_size;
    int index;

    input = &main_screen.main_screen_text_input_selected_set;
    // 获取文本框内容
    gx_single_line_text_input_buffer_get(input, &input_string, (UINT *)&string_size, GX_NULL);
    // 字符串转数值
    string_to_int(input_string, string_size, &index);
    // 设置list当前条目=index
    if ((index >= 0) && (index < LIST_ROWS))
    {
        gx_vertical_list_selected_set(&main_screen.main_screen_vertical_list_scroll, index);
    }
}



而早先windows代码风格有可能是这样的:
static void set_selected_index()
{
    index = StrToInt(Form1->Edit1->Text);
    Form1->List1->SelectedId = index;
}


GUIX的语法风格如此设计,是否真的是有什么玄机在里面?比如出于体现组件灵活性的需要,又或者出于安全性的需要?
但作为使用者,总感觉是很别扭。

又或者需要使用者把常用组件API函数按自己的习惯,自行再包装一次?

回复

使用道具 举报

6

主题

231

回帖

249

积分

高级会员

积分
249
发表于 2022-1-30 18:20:10 | 显示全部楼层
哪有什么玄机,又长又臭又哆嗦的命名风格。
回复

使用道具 举报

58

主题

267

回帖

446

积分

高级会员

积分
446
发表于 2022-2-2 13:06:14 | 显示全部楼层
出于安全考虑,GUIX(Thread X 全家桶)的 API 函数都是返回错误码,表示执行结果。
哪怕是获取一个数值,也是需要把接收这个数值的变量地址以参数形式传给获取函数。

这样一来就不能采用将一个函数在另一个函数的参数列表里直接调用的形式(你的 windows 例程那种形式,这种形式看起来确实会简洁)。
所以 GUIX 的代码看起来就比较啰嗦,一个简单功能也要好几行代码。

另外一个就是楼上的,命名确实太长了,没有一个好的 IDE 做提示,真的记不住
回复

使用道具 举报

0

主题

57

回帖

57

积分

初级会员

积分
57
发表于 2022-2-3 06:29:22 | 显示全部楼层
API 名字的规律是:

gx_<模块>_对象_操作。

模块是: single_line_text_input
对象是: buffer
操作:  get

回复

使用道具 举报

56

主题

907

回帖

1075

积分

至尊会员

积分
1075
发表于 2022-2-3 12:23:21 | 显示全部楼层
这种又臭又长的才是标准的搞法。 项目大了就知道好处了。
回复

使用道具 举报

6

主题

231

回帖

249

积分

高级会员

积分
249
发表于 2022-2-3 17:00:06 | 显示全部楼层
roguebear 发表于 2022-2-3 12:23
这种又臭又长的才是标准的搞法。 项目大了就知道好处了。

嵌入式项目能有多大?有PC软件大吗?

typedef struct GX_RECTANGLE_STRUCT
{
    GX_VALUE gx_rectangle_left;
    GX_VALUE gx_rectangle_top;
    GX_VALUE gx_rectangle_right;
    GX_VALUE gx_rectangle_bottom;
} GX_RECTANGLE;

改为这样就好了。
typedef struct GX_RECTANGLE_STRUCT
{
    GX_VALUE left;
    GX_VALUE top;
    GX_VALUE right;
    GX_VALUE bottom;
} GX_RECTANGLE;
回复

使用道具 举报

24

主题

122

回帖

194

积分

初级会员

积分
194
 楼主| 发表于 2022-2-7 11:25:58 | 显示全部楼层
GUIX确实是不好整。移植简单,demo也能看个大概齐。但是。。。
1 - 框架过于灵活,API过多;
2 - 过于执着于UI的细节处理,对编程人员不够友好;

guix studio如果能支持完整的UI布局(比如支持各种对齐方式),UI涉及的API再提炼精简一下,做到UI与代码分离,那就很舒服了。

所以对于一些普通项目,lvgl或许是更好的选择。
回复

使用道具 举报

58

主题

267

回帖

446

积分

高级会员

积分
446
发表于 2022-2-14 09:25:57 | 显示全部楼层
yxydoctor 发表于 2022-2-7 11:25
GUIX确实是不好整。移植简单,demo也能看个大概齐。但是。。。
1 - 框架过于灵活,API过多;
2 - 过于执 ...

UI 与代码分离,用 Touch GFX
回复

使用道具 举报

21

主题

125

回帖

188

积分

初级会员

积分
188
发表于 2022-2-14 09:29:11 | 显示全部楼层
ihavedone 发表于 2022-2-14 09:25
UI 与代码分离,用 Touch GFX

这个只能ST的芯片才能用吧,而且也不开源
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-10 08:32 , Processed in 0.229930 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表