[STM32F7] STM32例程+STM32F767 Nucleo之RT-GUI实验

[复制链接]
8761|23
 楼主| lxyppc 发表于 2017-10-13 15:05 | 显示全部楼层
一路向北lm 发表于 2017-10-13 09:19
厉害,gui做的不错,学习了哈。

其实ui全靠贴图上面的段式液晶,就是背景图再加上rtgui_dc_fill_polygon函数画的
先定义好背景图片的数据数组和各个笔段的多边形数据
  1. static const rt_uint8_t back_raw_565[] = {
  2.     #include "lcd_back_raw_565_data.c"
  3. };
  4. const int seg_a [] = { /* size */  4,
  5.    34,    12,    55,    12,    51,    18,    41,    18, };
  6. const int seg_b [] = { /* size */  6,
  7.    56,    13,    58,    14,    58,    34,    56,    36,    52,    33,    52,    20, };
当需要重画的时候,先画背景图片,然后再画对应的笔段
  1. for(y=0;y<LCD_HEIGHT;++y){
  2.     dc->engine->blit_line(dc, 0, LCD_WIDTH, y,  (rt_uint8_t*)line_data);
  3.     line_data += LCD_LINE_DATA_SIZE;
  4. }

  5. RTGUI_DC_FC(dc) = black;
  6. if(me->flag & SEG_MEM){
  7.     draw_seg(dc, seg_memory, 0);
  8. }
  9. if(me->flag & SEG_ERROR){
  10.     draw_seg(dc, seg_error, 0);
  11. }
  12. if(me->flag & SEG_MINUS){
  13.     draw_seg(dc, seg_minus, 0);
  14. }
  15. for(y=0;y<sizeof(me->seg_status);++y){
  16.     int i=0;
  17.     rt_uint8_t f = 1;
  18.     while(i<8){
  19.         if(me->seg_status[y] & f){
  20.             draw_seg(dc, segs[i], y);
  21.         }
  22.         ++i;f<<=1;
  23.     }
  24. }
完整的笔段液晶ui代码在这里下载
下面的按钮就是贴两张图片完成的,一张按下时显示,一张抬起时显示
  1. static void add_button_1(rtgui_container_t* container){
  2.   struct rtgui_rect rect;
  3.   rtgui_button_t *button;
  4.   button = rtgui_button_create("MC");
  5.   rect.x1 = 10;
  6.   rect.x2 = 10+48;
  7.   rect.y1 = 100;
  8.   rect.y2 = 100+32;
  9.   rtgui_widget_set_rect(RTGUI_WIDGET(button), &rect);
  10.   rtgui_container_add_child(container, RTGUI_WIDGET(button));
  11.   RTGUI_WIDGET(button)->user_data = M_CLR; // set button id
  12.   RTGUI_WIDGET_SET_UNFOCUSABLE(button);
  13.   rtgui_button_set_onbutton(button, calc_on_button);
  14.   rtgui_button_set_pressed_image(button, (rtgui_image_t *)&image_press_1);
  15.   rtgui_button_set_unpressed_image(button, (rtgui_image_t *)&image_unpress_1);
  16. }
这里按钮很多,为了让按钮图片节约内存,我在rtgui框架下新增了一种imge_mem的图片类型,这种图片不能修改,不占用RAM空间
image_mem的代码在这里下载

LyCrystal 发表于 2017-10-13 18:33 | 显示全部楼层
mark一下,作跟随阅读
天照 发表于 2017-10-26 18:43 | 显示全部楼层
记号一个,慢慢学习,感谢楼主的分享
wandersky 发表于 2020-2-18 13:15 | 显示全部楼层
收藏了,好东西
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部