OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2391|回复: 1

emWin 新手入门学习使用笔记 (2)

[复制链接]

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2023-3-14
在线时间
20 小时
发表于 2023-6-8 15:53:48 | 显示全部楼层 |阅读模式
本帖最后由 captainabc1 于 2023-6-8 16:57 编辑

                                       emWin 新手入门学习笔记 (2)
续学习笔记(1)……
4  简单解析自动生成的界面代码
    设计的界面生成的 FramewinDLG.C程序是个啥模样?(请参见附件程序清单)。
下面从3方面简单解析,不妥之处恳请网友指出。
(1)  与控件尺寸、位置相关的数值信息
  看下这几行:
  1.         static const GUI_WIDGET_CREATE_INFO_aDialogCreate[] = {
  2.        { FRAMEWIN_CreateIndirect,"Framewin", ID_FRAMEWIN_0, 0, 0, 320, 240, 0, 0x64, 0 },
  3.        {BUTTON_CreateIndirect, "ON", ID_BUTTON_0, 60, 100, 80, 38, 0, 0x0, 0},
复制代码
    我画了图1这张图,可对照着看一下。在用GUIBuilderV5.46 工具设计这个界面时,  选中ON按钮控件,可看到:xPos=60; yPos=100; xSize=80; ySize=38;这些数值的含
  义是显而易见的。需要注意的是yPos=100;这个值,是由Y0=0处算起的值,而不是由屏幕
  的原点算起的,而Y0值(相对屏幕原点)大小与你选择的窗口标题字的大小相关联。            学习笔记(2)附图1.png    
                       图1  程序中控件数据信息与界面图形的对应关系图

(2)与用户程序执行功能相关的消息代码
  1. switch(NCode) {
  2.        case WM_NOTIFICATION_CLICKED:   //ON按钮按下
  3.        // USER START (Optionally insert code for reacting on notificationmessage)
  4.        // USER END  //笔者注:用户在此可插入自己对通知消息进行响应的代码
  5.        break;
  6.      case WM_NOTIFICATION_RELEASED:  //ON按钮弹起
  7.       // USER START (Optionally insert code for reacting on notificationmessage)
  8.        // USER END
  9.        break;
复制代码
     对于OFF按钮对应的代码与此类似。

(3) 与GUI函数库相关联的信息
用#define来对函数进行“定义”,将界面设计的控件与GUI的库函数联系起来,
   以实现在用户屏幕显示设计的界面。
  1. #define ID_FRAMEWIN_0 (GUI_ID_USER+ 0x00)
  2.         #define ID_BUTTON_0 (GUI_ID_USER + 0x01)
  3.         #define ID_BUTTON_1 (GUI_ID_USER + 0x02)
  4.         #define ID_TEXT_0 (GUI_ID_USER + 0x03)
复制代码
      据资料介绍,GUI的库函数是以.lib的形式提供给用户使用,其代码是不开源的,
   喜欢深入钻研的网友,可去看emWin的前身uCGUI,这个是开源的。
5  自动生成的界面代码怎么用?
     笔者界面用两个按钮来控制LED灯的亮灭。对于生成的程序,只需将它复制、粘贴
   到用户程序中,在ON及OFF按钮后面,分别插入LED灯亮、灯灭的代码,然后在MDK5(Keil5)
   开发环境下,编译调试后,即可运行!
      对于较复杂、绚丽的界面,相对就麻烦些,STemWin 这个软件包提供了模拟器
   这个工具(SimulationTrial),可在电脑中仿真、调试,运行通过后,再放到单片机
   中去用。


  1. 笔记附件程序清单:
  2. /*********************************************************************
  3. *                                                                    *
  4. *                SEGGER Microcontroller GmbH & Co. KG                *
  5. *        Solutions for real time microcontroller applications        *
  6. *                                                                    *
  7. **********************************************************************
  8. *                                                                    *
  9. * C-file generated by:                                               *
  10. *                                                                    *
  11. *        GUI_Builder for emWin version 5.46                          *
  12. *        Compiled Dec 12 2017, 16:38:40                              *
  13. *        (c) 2017 Segger Microcontroller GmbH & Co. KG               *
  14. *                                                                    *
  15. **********************************************************************
  16. *                                                                    *
  17. *        Internet: www.segger.com  Support: support@segger.com       *
  18. *                                                                    *
  19. **********************************************************************
  20. */

  21. // USER START (Optionally insert additional includes)
  22. // USER END

  23. #include "DIALOG.h"

  24. /*********************************************************************
  25. *
  26. *       Defines
  27. *
  28. **********************************************************************
  29. */
  30. #define ID_FRAMEWIN_0 (GUI_ID_USER + 0x00)
  31. #define ID_BUTTON_0 (GUI_ID_USER + 0x01)
  32. #define ID_BUTTON_1 (GUI_ID_USER + 0x02)
  33. #define ID_TEXT_0 (GUI_ID_USER + 0x03)


  34. // USER START (Optionally insert additional defines)
  35. // USER END

  36. /*********************************************************************
  37. *
  38. *       Static data
  39. *
  40. **********************************************************************
  41. */

  42. // USER START (Optionally insert additional static data)
  43. // USER END

  44. /*********************************************************************
  45. *
  46. *       _aDialogCreate
  47. */
  48. static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  49.   { FRAMEWIN_CreateIndirect, "Framewin", ID_FRAMEWIN_0, 0, 0, 320, 240, 0, 0x64, 0 },
  50.   { BUTTON_CreateIndirect, "ON", ID_BUTTON_0, 60, 100, 80, 38, 0, 0x0, 0 },
  51.   { BUTTON_CreateIndirect, "OFF", ID_BUTTON_1, 180, 100, 80, 38, 0, 0x0, 0 },
  52.   { TEXT_CreateIndirect, "LED_Control", ID_TEXT_0, 101, 47, 108, 28, 0, 0x0, 0 },
  53.   // USER START (Optionally insert additional widgets)
  54.   // USER END
  55. };

  56. /*********************************************************************
  57. *
  58. *       Static code
  59. *
  60. **********************************************************************
  61. */

  62. // USER START (Optionally insert additional static code)
  63. // USER END

  64. /*********************************************************************
  65. *
  66. *       _cbDialog
  67. */
  68. static void _cbDialog(WM_MESSAGE * pMsg) {
  69.   WM_HWIN hItem;
  70.   int     NCode;
  71.   int     Id;
  72.   // USER START (Optionally insert additional variables)
  73.   // USER END

  74.   switch (pMsg->MsgId) {
  75.   case WM_INIT_DIALOG:
  76.     //
  77.     // Initialization of 'Framewin'
  78.     //
  79.     hItem = pMsg->hWin;
  80.     FRAMEWIN_SetText(hItem, "STemWin_Study_1");
  81.     FRAMEWIN_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
  82.     FRAMEWIN_SetFont(hItem, GUI_FONT_20_ASCII);
  83.     //
  84.     // Initialization of 'ON'
  85.     //
  86.     hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
  87.     BUTTON_SetFont(hItem, GUI_FONT_20_ASCII);
  88.     //
  89.     // Initialization of 'OFF'
  90.     //
  91.     hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_1);
  92.     BUTTON_SetFont(hItem, GUI_FONT_20_ASCII);
  93.     //
  94.     // Initialization of 'LED_Control'
  95.     //
  96.     hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
  97.     TEXT_SetFont(hItem, GUI_FONT_20_ASCII);
  98.     // USER START (Optionally insert additional code for further widget initialization)
  99.     // USER END
  100.     break;
  101.   case WM_NOTIFY_PARENT:
  102.     Id    = WM_GetId(pMsg->hWinSrc);
  103.     NCode = pMsg->Data.v;
  104.     switch(Id) {
  105.     case ID_BUTTON_0: // Notifications sent by 'ON'
  106.       switch(NCode) {
  107.       case WM_NOTIFICATION_CLICKED:
  108.         // USER START (Optionally insert code for reacting on notification message)
  109.         // USER END
  110. break;
  111.       case WM_NOTIFICATION_RELEASED:
  112.         // USER START (Optionally insert code for reacting on notification message)
  113.         // USER END
  114.         break;
  115.       // USER START (Optionally insert additional code for further notification handling)
  116.       // USER END
  117.       }
  118.       break;
  119.     case ID_BUTTON_1: // Notifications sent by 'OFF'
  120.       switch(NCode) {
  121.       case WM_NOTIFICATION_CLICKED:
  122.         // USER START (Optionally insert code for reacting on notification message)
  123.         // USER END
  124. break;
  125.       case WM_NOTIFICATION_RELEASED:
  126.         // USER START (Optionally insert code for reacting on notification message)
  127.         // USER END
  128.         break;
  129.       // USER START (Optionally insert additional code for further notification handling)
  130.       // USER END
  131.       }
  132.       break;
  133.     // USER START (Optionally insert additional code for further Ids)
  134.     // USER END
  135.     }
  136.     break;
  137.   // USER START (Optionally insert additional message handling)
  138.   // USER END
  139.   default:
  140.     WM_DefaultProc(pMsg);
  141.     break;
  142.   }
  143. }

  144. /*********************************************************************
  145. *
  146. *       Public code
  147. *
  148. **********************************************************************
  149. */
  150. /*********************************************************************
  151. *
  152. *       CreateFramewin
  153. */
  154. WM_HWIN CreateFramewin(void);
  155. WM_HWIN CreateFramewin(void) {
  156.   WM_HWIN hWin;

  157.   hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
  158.   return hWin;
  159. }

  160. // USER START (Optionally insert additional public code)
  161. // USER END

  162. /*************************** End of file ****************************/
复制代码

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
227
金钱
227
注册时间
2012-9-14
在线时间
60 小时
发表于 2023-9-22 22:30:17 | 显示全部楼层
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 04:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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