硬汉嵌入式论坛

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

[emWin] 关于listbox项目删除的问题

[复制链接]

13

主题

48

回帖

87

积分

初级会员

积分
87
发表于 2018-2-24 15:37:43 | 显示全部楼层 |阅读模式
listbox删除最后一行时界面不会刷新,本该删除的项目仍然存在,背景颜色从蓝色变为灰色,但是其他非最后一行的项目删除时会更新,为什么?怎么解决呢?

1

1

2

2


回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-2-24 16:07:28 | 显示全部楼层
这个得需要测试才能解决问题,楼主方便的话,做一个模拟器运行的测试代码,我给你测试修正下。
回复

使用道具 举报

13

主题

48

回帖

87

积分

初级会员

积分
87
 楼主| 发表于 2018-2-26 13:47:54 | 显示全部楼层
eric2013 发表于 2018-2-24 16:07
这个得需要测试才能解决问题,楼主方便的话,做一个模拟器运行的测试代码,我给你测试修正下。

怎么才能在模拟器上运行自己的例子、、、、、
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-2-26 13:52:27 | 显示全部楼层
黑眼圈红了 发表于 2018-2-26 13:47
怎么才能在模拟器上运行自己的例子、、、、、

不用运行整个例子,就简单的创建一个对话框,一个listbox,一个按钮用来操作listbox删除即可。
回复

使用道具 举报

13

主题

48

回帖

87

积分

初级会员

积分
87
 楼主| 发表于 2018-2-26 14:33:33 | 显示全部楼层
eric2013 发表于 2018-2-26 13:52
不用运行整个例子,就简单的创建一个对话框,一个listbox,一个按钮用来操作listbox删除即可。

嗯,我做好了,直接贴代码给你吗?
回复

使用道具 举报

13

主题

48

回帖

87

积分

初级会员

积分
87
 楼主| 发表于 2018-2-26 14:41:11 | 显示全部楼层
eric2013 发表于 2018-2-26 13:52
不用运行整个例子,就简单的创建一个对话框,一个listbox,一个按钮用来操作listbox删除即可。
  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.22                          *
  11. *        Compiled Jul  4 2013, 15:16:01                              *
  12. *        (c) 2013 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_LISTBOX_0  (GUI_ID_USER + 0x01)
  31. #define ID_BUTTON_0  (GUI_ID_USER + 0x02)
  32. #define ID_BUTTON_1  (GUI_ID_USER + 0x03)


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

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

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

  43. /*********************************************************************
  44. *
  45. *       _aDialogCreate
  46. */
  47. static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  48.   { FRAMEWIN_CreateIndirect, "Framewin", ID_FRAMEWIN_0, 27, 33, 320, 240, 0, 0x0, 0 },
  49.   { LISTBOX_CreateIndirect, "Listbox", ID_LISTBOX_0, 10, 15, 80, 100, 0, 0x0, 0 },
  50.   { BUTTON_CreateIndirect, "add", ID_BUTTON_0, 135, 26, 80, 20, 0, 0x0, 0 },
  51.   { BUTTON_CreateIndirect, "delete", ID_BUTTON_1, 136, 70, 80, 20, 0, 0x0, 0 },
  52.   // USER START (Optionally insert additional widgets)
  53.   // USER END
  54. };

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

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

  63. /*********************************************************************
  64. *
  65. *       _cbDialog
  66. */
  67. static void _cbDialog(WM_MESSAGE * pMsg) {
  68.   WM_HWIN hWin = pMsg->hWin;
  69.   WM_HWIN hItem;
  70.   WM_HWIN hListbox;
  71.   int     NCode;
  72.   int     Id;
  73.   unsigned char CurrentNum;
  74.   unsigned char CurrentSel;
  75.   char buf[5] = {"Item"};
  76.   // USER START (Optionally insert additional variables)
  77.   // USER END

  78.   switch (pMsg->MsgId) {
  79.   case WM_INIT_DIALOG:
  80.     //
  81.     // Initialization of 'Listbox'
  82.     //
  83.     hItem = WM_GetDialogItem(pMsg->hWin, ID_LISTBOX_0);
  84.     LISTBOX_AddString(hItem, "Item 0");
  85.     LISTBOX_AddString(hItem, "Item 1");
  86.     LISTBOX_AddString(hItem, "Item 2");
  87.     //
  88.     // Initialization of 'add'
  89.     //
  90.     hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
  91.     BUTTON_SetFont(hItem, GUI_FONT_13_1);
  92.     // USER START (Optionally insert additional code for further widget initialization)
  93.     // USER END
  94.     break;
  95.   case WM_NOTIFY_PARENT:
  96.     Id    = WM_GetId(pMsg->hWinSrc);
  97.     NCode = pMsg->Data.v;
  98.     switch(Id) {
  99.     case ID_LISTBOX_0: // Notifications sent by 'Listbox'
  100.       switch(NCode) {
  101.       case WM_NOTIFICATION_CLICKED:
  102.         // USER START (Optionally insert code for reacting on notification message)
  103.         // USER END
  104.         break;
  105.       case WM_NOTIFICATION_RELEASED:
  106.         // USER START (Optionally insert code for reacting on notification message)
  107.         // USER END
  108.         break;
  109.       case WM_NOTIFICATION_SEL_CHANGED:
  110.         // USER START (Optionally insert code for reacting on notification message)
  111.         // USER END
  112.         break;
  113.       // USER START (Optionally insert additional code for further notification handling)
  114.       // USER END
  115.       }
  116.       break;
  117.     case ID_BUTTON_0: // Notifications sent by 'add'
  118.       switch(NCode) {
  119.       case WM_NOTIFICATION_CLICKED:
  120.         // USER START (Optionally insert code for reacting on notification message)
  121.         // USER END
  122.         break;
  123.       case WM_NOTIFICATION_RELEASED:
  124.         // USER START (Optionally insert code for reacting on notification message)
  125.         // USER END
  126.                   {
  127.                         hListbox = WM_GetDialogItem(hWin,ID_LISTBOX_0);
  128.                         CurrentNum = LISTBOX_GetNumItems(hListbox);
  129.             CurrentNum += 1;
  130.                         buf[4] = '0' + CurrentNum;
  131.                         LISTBOX_AddString(hListbox,buf);
  132.                   }
  133.         break;
  134.       // USER START (Optionally insert additional code for further notification handling)
  135.       // USER END
  136.       }
  137.       break;
  138.     case ID_BUTTON_1: // Notifications sent by 'delete'
  139.       switch(NCode) {
  140.       case WM_NOTIFICATION_CLICKED:
  141.         // USER START (Optionally insert code for reacting on notification message)
  142.         // USER END
  143.         break;
  144.       case WM_NOTIFICATION_RELEASED:
  145.         // USER START (Optionally insert code for reacting on notification message)
  146.         // USER END
  147.                   {
  148.                         hListbox = WM_GetDialogItem(hWin,ID_LISTBOX_0);
  149.                     CurrentNum = LISTBOX_GetNumItems(hListbox);  /*获取当前总模板数,板数不以0为基准*/
  150.                         CurrentSel = LISTBOX_GetSel(hListbox);
  151.                         LISTBOX_DeleteItem(hListbox,CurrentSel);

  152.                   }
  153.         break;
  154.       // USER START (Optionally insert additional code for further notification handling)
  155.       // USER END
  156.       }
  157.       break;
  158.     // USER START (Optionally insert additional code for further Ids)
  159.     // USER END
  160.     }
  161.     break;
  162.   // USER START (Optionally insert additional message handling)
  163.   // USER END
  164.   default:
  165.     WM_DefaultProc(pMsg);
  166.     break;
  167.   }
  168. }

  169. /*********************************************************************
  170. *
  171. *       Public code
  172. *
  173. **********************************************************************
  174. */
  175. /*********************************************************************
  176. *
  177. *       CreateFramewin
  178. */
  179. WM_HWIN CreateFramewin(void);
  180. WM_HWIN CreateFramewin(void) {
  181.   WM_HWIN hWin;

  182.   hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
  183.   return hWin;
  184. }

  185. // USER START (Optionally insert additional public code)
  186. // USER END


  187. /*********************************************************************
  188. *
  189. * MainTask
  190. */
  191. void MainTask(void)
  192. {
  193.   /* 窗口自动使用存储设备 */
  194.   WM_SetCreateFlags(WM_CF_MEMDEV);
  195.   /* 初始化 */
  196.   GUI_Init();
  197.   /* 创建对话框,使用 GUIBulder5.28 生成的对话框创建函数 */
  198.   CreateFramewin();
  199.   while(1)
  200.   {
  201.     GUI_Delay(10);
  202.   }
  203. }
  204. /*************************** End of file ****************************/
复制代码
回复

使用道具 举报

13

主题

48

回帖

87

积分

初级会员

积分
87
 楼主| 发表于 2018-2-26 14:42:35 | 显示全部楼层
eric2013 发表于 2018-2-26 13:52
不用运行整个例子,就简单的创建一个对话框,一个listbox,一个按钮用来操作listbox删除即可。

在模拟器上运行也是这样的,删除最后一个项目时也是不能即时刷新到最新列表项目。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-2-26 18:22:19 | 显示全部楼层
帮你测试了下,早期5.32这个bug,使用STemWin5.40,无此问题了,你试试看。
回复

使用道具 举报

13

主题

48

回帖

87

积分

初级会员

积分
87
 楼主| 发表于 2018-2-27 08:43:12 | 显示全部楼层
eric2013 发表于 2018-2-26 18:22
帮你测试了下,早期5.32这个bug,使用STemWin5.40,无此问题了,你试试看。

好的,我试一下,谢谢你啊
回复

使用道具 举报

13

主题

48

回帖

87

积分

初级会员

积分
87
 楼主| 发表于 2018-2-27 09:11:11 | 显示全部楼层
eric2013 发表于 2018-2-26 18:22
帮你测试了下,早期5.32这个bug,使用STemWin5.40,无此问题了,你试试看。

我下载5.40之后替换了之前的头文件和库,为什么模拟运行还是一样呢?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-2-27 10:06:20 | 显示全部楼层
黑眼圈红了 发表于 2018-2-27 09:11
我下载5.40之后替换了之前的头文件和库,为什么模拟运行还是一样呢?

用板子测试,板子用的库是没问题的,我已经在我们V6板子帮你测试了。
回复

使用道具 举报

13

主题

48

回帖

87

积分

初级会员

积分
87
 楼主| 发表于 2018-2-27 10:35:19 | 显示全部楼层
eric2013 发表于 2018-2-27 10:06
用板子测试,板子用的库是没问题的,我已经在我们V6板子帮你测试了。

我将头文件和库替换到我的工程文件里,编译的时候出现错误警告, 显示找不到5.28的库(我将5.28的库替换成了5.40的),需要修改哪里吗?为什么不编译5.40的库呢?
回复

使用道具 举报

13

主题

48

回帖

87

积分

初级会员

积分
87
 楼主| 发表于 2018-2-27 11:21:29 | 显示全部楼层
eric2013 发表于 2018-2-27 10:06
用板子测试,板子用的库是没问题的,我已经在我们V6板子帮你测试了。

弄好了,5.40确实解决了这个问题,但是我控件皮肤全变了,自带背景色的咩?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-2-27 11:50:59 | 显示全部楼层
黑眼圈红了 发表于 2018-2-27 11:21
弄好了,5.40确实解决了这个问题,但是我控件皮肤全变了,自带背景色的咩?

是的,后面的版本默认开启皮肤色。
回复

使用道具 举报

13

主题

48

回帖

87

积分

初级会员

积分
87
 楼主| 发表于 2018-2-27 13:22:06 | 显示全部楼层
eric2013 发表于 2018-2-27 11:50
是的,后面的版本默认开启皮肤色。

嗯,要在哪里禁掉呢?还有,发现关闭按钮不好用,重复使用几次之后就关闭不了了是什么情况?
回复

使用道具 举报

13

主题

48

回帖

87

积分

初级会员

积分
87
 楼主| 发表于 2018-2-27 14:15:22 | 显示全部楼层
eric2013 发表于 2018-2-27 11:50
是的,后面的版本默认开启皮肤色。

为什么设置颜色GUI_RED,本来该是红色,实际效果却是成了蓝色,GUI_BLUE成了红色?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-2-27 14:59:32 | 显示全部楼层
黑眼圈红了 发表于 2018-2-27 14:15
为什么设置颜色GUI_RED,本来该是红色,实际效果却是成了蓝色,GUI_BLUE成了红色?

在GUI.h文件里面找到颜色定义的地方,有个宏定义的,你在GUIConf.h文件里面定义下即可,使用ARGB格式还是ABGR格式。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-16 12:06 , Processed in 0.444388 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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