硬汉嵌入式论坛

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

[ThreadX全家桶] 谁用过GUIX的Template功能,有人做过详细介绍吗?

[复制链接]

45

主题

123

回帖

258

积分

高级会员

积分
258
发表于 2021-11-27 12:26:36 | 显示全部楼层 |阅读模式
本帖最后由 yihang1004 于 2021-11-27 16:16 编辑

1.最近在做多个界面调用一个顶部状态栏,发现只是显示类的没有问题;
2.如果定义按钮类的,无法在Screen Flow里找到该按钮,如果写一个回调函数,不管在哪个界面按按钮都会调用一个函数,谁用过的风享一下经验。
回复

使用道具 举报

4

主题

1459

回帖

1471

积分

至尊会员

积分
1471
发表于 2021-11-27 21:57:10 | 显示全部楼层
1. 这个就是GUIX 的demo工程,这是一个Template
q12-1.jpg 2. 这是继承模板的窗体
q12-2.jpg


  1. VOID page_button_draw(GX_PIXELMAP_BUTTON *widget)
  2. {
  3.     GX_PIXELMAP *bkgnd;
  4.     GX_PIXELMAP *icon;

  5.     GX_RESOURCE_ID text_id = 0;
  6.     GX_STRING text;
  7.     GX_FONT *font;
  8.     INT width;
  9.     GX_VALUE string_width;
  10.     INT xpos;
  11.     INT ypos;
  12.     INT top;
  13.     INT left;
  14.     INT parent_id = 0;
  15.     GX_BOOL draw_selected = GX_FALSE;

  16.     left = widget->gx_widget_size.gx_rectangle_left;
  17.     top = widget->gx_widget_size.gx_rectangle_top;

  18.     if (widget->gx_widget_style & GX_STYLE_BUTTON_PUSHED)
  19.     {
  20.         draw_selected = GX_TRUE;
  21.         top += 2;
  22.     }
  23.     if (widget->gx_widget_parent)
  24.     {
  25.         parent_id = widget->gx_widget_parent->gx_widget_id;
  26.     }

  27.     switch(widget->gx_widget_id)
  28.     {
  29.         case ID_PATIENTS_BUTTON:
  30.             gx_widget_pixelmap_get(widget, GX_PIXELMAP_ID_ICON_PATIENTS, &icon);
  31.             text_id = GX_STRING_ID_PATIENT_LIST;

  32.             if (parent_id == ID_PATIENTS_SCREEN)
  33.             {
  34.                 draw_selected = GX_TRUE;
  35.             }
  36.             break;

  37.         case ID_MEDS_BUTTON:
  38.             gx_widget_pixelmap_get(widget, GX_PIXELMAP_ID_ICON_MEDICATIONS, &icon);
  39.             text_id = GX_STRING_ID_MEDICATIONS;

  40.             if (parent_id == ID_MEDS_SCREEN)
  41.             {
  42.                 draw_selected = GX_TRUE;
  43.             }
  44.             break;

  45.         case ID_VITALS_BUTTON:
  46.             gx_widget_pixelmap_get(widget, GX_PIXELMAP_ID_ICON_VITALS, &icon);
  47.             text_id = GX_STRING_ID_VITALS;

  48.             if (parent_id == ID_VITALS_SCREEN)
  49.             {
  50.                 draw_selected = GX_TRUE;
  51.             }
  52.             break;
  53.     }

  54.     if (draw_selected)
  55.     {
  56.         gx_widget_pixelmap_get(widget, GX_PIXELMAP_ID_BUTTON_ACTIVE, &bkgnd);
  57.         gx_context_fill_color_set(GX_COLOR_ID_WHITE);
  58.         gx_context_line_color_set(GX_COLOR_ID_WHITE);
  59.     }
  60.     else
  61.     {
  62.         gx_widget_pixelmap_get(widget, GX_PIXELMAP_ID_BUTTON, &bkgnd);
  63.         gx_context_fill_color_set(GX_COLOR_ID_LIGHT_GRAY);
  64.         gx_context_line_color_set(GX_COLOR_ID_LIGHT_GRAY);
  65.     }

  66.     gx_canvas_pixelmap_draw(left, top, bkgnd);
  67.     gx_widget_font_get(widget, GX_FONT_ID_SMALL_BOLD, &font);
  68.     gx_widget_string_get_ext(widget, text_id, &text);
  69.     gx_system_string_width_get_ext(font, &text, &string_width);

  70.     // draw the icon
  71.     width = icon->gx_pixelmap_width + string_width + 10;
  72.     xpos = widget->gx_widget_size.gx_rectangle_right - widget->gx_widget_size.gx_rectangle_left + 1;
  73.     xpos -= width;
  74.     xpos = left + (xpos / 2);

  75.     ypos = widget->gx_widget_size.gx_rectangle_bottom - widget->gx_widget_size.gx_rectangle_top + 1;
  76.     ypos -= icon->gx_pixelmap_height;
  77.     ypos = top + (ypos / 2);

  78.     gx_canvas_pixelmap_draw(xpos, ypos, icon);

  79.     // draw the text
  80.     xpos += icon->gx_pixelmap_width + 10;

  81.     ypos = widget->gx_widget_size.gx_rectangle_bottom - widget->gx_widget_size.gx_rectangle_top + 1;
  82.     ypos -= font->gx_font_line_height;
  83.     ypos = top + (ypos / 2);
  84.     gx_context_font_set(GX_FONT_ID_SMALL_BOLD);
  85.     gx_canvas_text_draw_ext(xpos, ypos, &text);
  86. }
复制代码


回复

使用道具 举报

4

主题

1459

回帖

1471

积分

至尊会员

积分
1471
发表于 2021-11-27 22:04:46 | 显示全部楼层
q12-3.jpg
这个事件处理回调,自己实现,代码如上一个回帖。
关键是通过
  1.     if (widget->gx_widget_parent)
  2.     {
  3.         parent_id = widget->gx_widget_parent->gx_widget_id;
  4.     }
复制代码
来识别是哪个窗体传递来的。
回复

使用道具 举报

45

主题

123

回帖

258

积分

高级会员

积分
258
 楼主| 发表于 2021-11-27 23:17:27 来自手机 | 显示全部楼层
好的,谢谢!回头研究一下。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-15 12:49 , Processed in 0.041025 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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