硬汉嵌入式论坛

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

[ThreadX全家桶] GUIX Studio生成的函数gx_studio_named_widget_create使用注意事项

[复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115800
QQ
发表于 2020-8-27 16:44:52 | 显示全部楼层 |阅读模式
这个函数第1个参数非常重要,不是随便写的,因为此函数会比较用户写的第1个参数是否在文件里面存在

UINT gx_studio_named_widget_create(char *name, GX_WIDGET *parent, GX_WIDGET **new_widget)
{
    UINT status = GX_FAILURE;
    GX_CONST GX_STUDIO_WIDGET_ENTRY *entry = guiapp_widget_table;
    GX_WIDGET *widget = GX_NULL;

    while(entry->widget_information)
    {
       if (!strcmp(name, entry->widget_information->widget_name))
        {
            widget = gx_studio_widget_create((GX_BYTE *) entry->widget, entry->widget_information, parent);
            if (widget)
            {
                status = GX_SUCCESS;
            }
            break;
        }
        entry++;
    }

    if (new_widget)
    {
        *new_widget = widget;
    }
    return status;
}


第1个参数是来自guiapp_widget_table,即xxxx__widget_table,这个前缀guiapp是用户使用GUIX Studio创建时的工程名。

我这里就是下面这个,仅有一个window_define


GX_CONST GX_STUDIO_WIDGET_ENTRY guiapp_widget_table[] =
{
    { &window_define, GX_NULL },
    {GX_NULL, GX_NULL}
};



GX_CONST GX_STUDIO_WIDGET window_define =
{
    "window",
    GX_TYPE_WINDOW,                          /* widget type                    */
    Window1_Main_ID,                         /* widget id                      */
    #if defined(GX_WIDGET_USER_DATA)
    0,                                       /* user data                      */
    #endif
    GX_STYLE_BORDER_THIN|GX_STYLE_ENABLED|GX_STYLE_DYNAMICALLY_ALLOCATED,   /* style flags */
    GX_STATUS_ACCEPTS_FOCUS,                 /* status flags                   */
    sizeof(WINDOW_CONTROL_BLOCK),            /* control block size             */
    GX_COLOR_ID_WINDOW_FILL,                 /* normal color id                */
    GX_COLOR_ID_WINDOW_FILL,                 /* selected color id              */
    GX_COLOR_ID_DISABLED_FILL,               /* disabled color id              */
    gx_studio_window_create,                 /* create function                */
    GX_NULL,                                 /* drawing function override      */
    GX_NULL,                                 /* event function override        */
    {0, 0, 799, 479},                        /* widget size                    */
    GX_NULL,                                 /* next widget                    */
    &window_prompt_define,                   /* child widget                   */
    0,                                       /* control block                  */
    (void *) &window_properties              /* extended properties            */
};



这样实际使用的时候,就是:

gx_studio_named_widget_create("window", (GX_WIDGET *)root, (GX_WIDGET **)&pScreen);





回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115800
QQ
 楼主| 发表于 2020-8-27 16:46:42 | 显示全部楼层
刚开始移植ThreadX GUIX那会,这个函数把我坑惨了,一直没有摸到门道,分享了下源码才知道怎么回事。
回复

使用道具 举报

4

主题

1445

回帖

1457

积分

至尊会员

积分
1457
发表于 2020-8-27 17:26:09 | 显示全部楼层
跟着硬汉大哥,总能学到很多
回复

使用道具 举报

22

主题

128

回帖

194

积分

初级会员

积分
194
发表于 2020-8-28 11:48:02 | 显示全部楼层
QQ图片20200828114603.png
硬汉,这些控件资源全部是全局变量,有办法变成动态分配的吗?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115800
QQ
 楼主| 发表于 2020-8-28 11:53:55 | 显示全部楼层
kirito 发表于 2020-8-28 11:48
硬汉,这些控件资源全部是全局变量,有办法变成动态分配的吗?

仅幕布需要动态内存即可

当前配套的例子已经为这部分空间安排了,做成了动态分配

http://www.armbbs.cn/forum.php?m ... &extra=page%3D1
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-19 11:54 , Processed in 0.217016 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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