硬汉嵌入式论坛

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

[emWin] emWin中listview带的header控件定时器更新方法

[复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115804
QQ
发表于 2021-1-18 11:39:09 | 显示全部楼层 |阅读模式


listview上带了一个header控件,为了实现定时更新,需要用户调用窗口无效化才会起作用。

测试代码:

  1. /*********************************************************************
  2. *                                                                    *
  3. *                SEGGER Microcontroller GmbH & Co. KG                *
  4. *        Solutions for real time microcontroller applications        *
  5. *                                                                    *
  6. **********************************************************************
  7. *                                                                    *
  8. * C-file generated by:                                               *
  9. *                                                                    *
  10. *        GUI_Builder for emWin version 5.32                          *
  11. *        Compiled Oct  8 2015, 11:59:02                              *
  12. *        (c) 2015 Segger Microcontroller GmbH & Co. KG               *
  13. *                                                                    *
  14. **********************************************************************
  15. *                                                                    *
  16. *        Internet: www.segger.com  Support: support@segger.com       *
  17. *                                                                    *
  18. **********************************************************************
  19. */

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

  22. #include "DIALOG.h"

  23. /*********************************************************************
  24. *
  25. *       Defines
  26. *
  27. **********************************************************************
  28. */
  29. #define ID_FRAMEWIN_0 (GUI_ID_USER + 0x00)
  30. #define ID_LISTVIEW_0 (GUI_ID_USER + 0x01)


  31. // USER START (Optionally insert additional defines)
  32. // USER END

  33. /*********************************************************************
  34. *
  35. *       Static data
  36. *
  37. **********************************************************************
  38. */

  39. // USER START (Optionally insert additional static data)
  40. // USER END

  41. /*********************************************************************
  42. *
  43. *       _aDialogCreate
  44. */
  45. static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  46.   { FRAMEWIN_CreateIndirect, "Framewin", ID_FRAMEWIN_0, 0, 0, 800, 480, 0, 0x64, 0 },
  47.   { LISTVIEW_CreateIndirect, "Listview", ID_LISTVIEW_0, 33, 21, 298, 158, 0, 0x0, 0 },
  48.   // USER START (Optionally insert additional widgets)
  49.   // USER END
  50. };

  51. /*********************************************************************
  52. *
  53. *       Static code
  54. *
  55. **********************************************************************
  56. */

  57. // USER START (Optionally insert additional static code)
  58. // USER END

  59. /*********************************************************************
  60. *
  61. *       _cbDialog
  62. */
  63. static void _cbDialog(WM_MESSAGE * pMsg) {
  64.   WM_HWIN hItem;
  65.   int     NCode;
  66.   int     Id;
  67.   static int i = 0;
  68.   char buf[100];
  69.   // USER START (Optionally insert additional variables)
  70.   // USER END

  71.   switch (pMsg->MsgId) {
  72.   case WM_INIT_DIALOG:
  73.     //
  74.     // Initialization of 'Framewin'
  75.     //
  76.     hItem = pMsg->hWin;
  77.     FRAMEWIN_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
  78.     FRAMEWIN_SetFont(hItem, GUI_FONT_32B_ASCII);
  79.     FRAMEWIN_SetText(hItem, "armfly");
  80.     //
  81.     // Initialization of 'Listview'
  82.     //
  83.     hItem = WM_GetDialogItem(pMsg->hWin, ID_LISTVIEW_0);
  84.     LISTVIEW_AddColumn(hItem, 60, "STM32-V3", GUI_TA_HCENTER | GUI_TA_VCENTER);
  85.     LISTVIEW_AddColumn(hItem, 60, "STM32-V4", GUI_TA_HCENTER | GUI_TA_VCENTER);
  86.     LISTVIEW_AddColumn(hItem, 60, "STM32-V5", GUI_TA_HCENTER | GUI_TA_VCENTER);
  87.     LISTVIEW_AddRow(hItem, NULL);
  88.     LISTVIEW_SetGridVis(hItem, 1);
  89.     LISTVIEW_AddColumn(hItem, 60, "STM32-V6", GUI_TA_HCENTER | GUI_TA_VCENTER);
  90.     LISTVIEW_AddRow(hItem, NULL);
  91.     LISTVIEW_AddRow(hItem, NULL);
  92.     LISTVIEW_SetItemText(hItem, 0, 0, "A00");
  93.     LISTVIEW_SetFont(hItem, GUI_FONT_16_ASCII);
  94.     LISTVIEW_SetItemText(hItem, 1, 0, "A01");
  95.     LISTVIEW_SetItemText(hItem, 2, 0, "A02");
  96.     LISTVIEW_SetItemText(hItem, 3, 0, "A03");
  97.     LISTVIEW_SetItemText(hItem, 0, 1, "B10");
  98.     LISTVIEW_SetItemText(hItem, 1, 1, "B11");
  99.     LISTVIEW_SetItemText(hItem, 2, 1, "B12");
  100.     LISTVIEW_SetItemText(hItem, 3, 1, "B13");
  101.     LISTVIEW_SetItemText(hItem, 0, 2, "C20");
  102.     LISTVIEW_SetItemText(hItem, 1, 2, "C21");
  103.     LISTVIEW_SetItemText(hItem, 2, 2, "C22");
  104.     LISTVIEW_SetItemText(hItem, 3, 2, "C23");

  105.     // USER START (Optionally insert additional code for further widget initialization)
  106.     // USER END
  107.     break;
  108.         case WM_TIMER:
  109.       hItem =  LISTVIEW_GetHeader(WM_GetDialogItem(pMsg->hWin, ID_LISTVIEW_0));
  110.            sprintf(buf, "%d", i++);
  111.            HEADER_SetItemText(hItem, 1, buf);
  112.            WM_InvalidateWindow(hItem);
  113.                 WM_RestartTimer(pMsg->Data.v, 100);
  114.         break;

  115.   case WM_NOTIFY_PARENT:
  116.     Id    = WM_GetId(pMsg->hWinSrc);
  117.     NCode = pMsg->Data.v;
  118.     switch(Id) {
  119.     case ID_LISTVIEW_0: // Notifications sent by 'Listview'
  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.       case WM_NOTIFICATION_SEL_CHANGED:
  130.         // USER START (Optionally insert code for reacting on notification message)
  131.         // USER END
  132.         break;
  133.       // USER START (Optionally insert additional code for further notification handling)
  134.       // USER END
  135.       }
  136.       break;
  137.     // USER START (Optionally insert additional code for further Ids)
  138.     // USER END
  139.     }
  140.     break;
  141.   // USER START (Optionally insert additional message handling)
  142.   // USER END
  143.   default:
  144.     WM_DefaultProc(pMsg);
  145.     break;
  146.   }
  147. }

  148. // USER START (Optionally insert additional public code)
  149. // USER END

  150. /*********************************************************************
  151. *
  152. *       MainTask
  153. */
  154. void MainTask(void)
  155. {
  156.         WM_HWIN hDlg;
  157.         WM_HTIMER hTimer;

  158.         /* 初始化 */
  159.         GUI_Init();

  160.         /* 窗口自动使用存储设备 */
  161.         WM_SetCreateFlags(WM_CF_MEMDEV);

  162.         /* 创建对话框,使用GUIBulder5.32生成的对话框创建函数 */
  163.          hDlg = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);

  164.         /* 给对话框hDlg创建定时器,溢出时间是100ms */
  165.         hTimer = WM_CreateTimer(WM_GetClientWindow(hDlg), 0, 100, 0);

  166.         while(1)
  167.         {
  168.                 GUI_Delay(50);
  169.         }
  170. }
复制代码


回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-20 00:06 , Processed in 0.206595 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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