[STM32F1] STemwin库显示时部分控件会自动消失

[复制链接]
 楼主| 19996 发表于 2019-10-10 17:22 | 显示全部楼层 |阅读模式
使用STM32F103控制一个LCD触摸屏,使用的是STMemwin的库,但是显示的时候有一个元素会存在显示不出来,偶然性的有时候可以有时候不可以。
然后我在该元素赋值以后使用GUI-DELAY进行刷新了,能够显示出来。但是,当程序跑完之后这个元素却消失了。

请问有谁遇到过该问题吗?帮帮忙
 楼主| 19996 发表于 2019-10-10 17:23 | 显示全部楼层
在显示过程中没有对该元素进行隐藏和删除处理
cry1109 发表于 2019-10-10 18:08 | 显示全部楼层
当程序跑完后是指GUI_Delay()延迟结束还是指其他意思?你在主循环里或者开个定时器,调用GUI_Exec()这个函数试一试。

评论

整个界面程序跑完之后会有一个GUI_Delay(),我使用但不运行,每次当整个函数执行完之后,那个显示的元素就不见了。  发表于 2019-10-10 18:56
 楼主| 19996 发表于 2019-10-10 18:57 | 显示全部楼层
cry1109 发表于 2019-10-10 18:08
当程序跑完后是指GUI_Delay()延迟结束还是指其他意思?你在主循环里或者开个定时器,调用GUI_Exec()这个函 ...

单步
 楼主| 19996 发表于 2019-10-10 19:15 | 显示全部楼层

不行啊,就算添加了这个刷新函数一样刷新不出来。我之前试过,刚刚又试了一下,还是不行。
cry1109 发表于 2019-10-10 20:40 | 显示全部楼层
19996 发表于 2019-10-10 19:15
不行啊,就算添加了这个刷新函数一样刷新不出来。我之前试过,刚刚又试了一下,还是不行。 ...

这个消失的是什么控件?还有,在跑完界面代码之后你运行的是什么程序?
 楼主| 19996 发表于 2019-10-11 10:14 | 显示全部楼层
cry1109 发表于 2019-10-10 20:40
这个消失的是什么控件?还有,在跑完界面代码之后你运行的是什么程序? ...

消失的是一个文字显示控件,界面跑完之后在另一个任务里面处理一下AD采集和触摸检测的操作。
cry1109 发表于 2019-10-11 21:56 | 显示全部楼层
19996 发表于 2019-10-11 10:14
消失的是一个文字显示控件,界面跑完之后在另一个任务里面处理一下AD采集和触摸检测的操作。 ...

这个就不知道啥原因了。我现在正在玩的,在资源列表中创建控件,在回调函数中完成初始化,目前没遇到啥问题。

资源列表:
{ TEXT_CreateIndirect, "Text", ID_TEXT_11, 82, 185, 26, 25, 0, 0x64, 0 },
{ TEXT_CreateIndirect, "Text", ID_TEXT_12, 212, 185, 20, 25, 0, 0x64, 0 },

初始化:
    hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_12);
    TEXT_SetTextColor(hItem, GUI_MAKE_COLOR(0x00FFFFFF));
    TEXT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
    TEXT_SetFont(hItem, &GUI_Fontsongti16);
    p_name = zhankongbi;
    TEXT_SetText(hItem, p_name);
 楼主| 19996 发表于 2019-10-14 16:48 | 显示全部楼层
cry1109 发表于 2019-10-11 21:56
这个就不知道啥原因了。我现在正在玩的,在资源列表中创建控件,在回调函数中完成初始化,目前没遇到啥问 ...

嗯嗯,我就是这么做的。不过现在我貌似知道问题在哪了,就是不明白什么原因。

我的A窗口是建立在B窗口上的,而此时B窗口的定时器还在运行,所以有可能是B窗口的定时器影响了,因为我每次将此定时器关闭就好了。

解决方案:创建A窗口同时将B窗口删除掉,这样既就不会影响A窗口了,也能正常显示。只是要调整一下B窗口里面的内容,使其不被影响。

没明白,是什么原因。。。。
cry1109 发表于 2019-10-15 09:11 | 显示全部楼层
本帖最后由 cry1109 于 2019-10-15 09:13 编辑
19996 发表于 2019-10-14 16:48
嗯嗯,我就是这么做的。不过现在我貌似知道问题在哪了,就是不明白什么原因。

我的A窗口是建立在B窗口上 ...

窗口切换的时候先调用GUI_EndDialog(pMsg->hWin, 0)函数来关闭当前窗口,然后再调用CreateWindow()创建新的窗口。如果定时器里开的有当前窗口的任务,比如说数据刷新,那么在关闭当前窗口之前必须先关闭定时器或者结束定时器里本窗口的相关任务,要不然窗口已经关闭,但是该窗口的某些任务还在运行,很容易卡死。我使用GUIBuilder工具做的界面,窗口以及窗口里的控件的操作都是在回调函数中,使用起来很方便。
 楼主| 19996 发表于 2019-10-15 15:54 | 显示全部楼层
cry1109 发表于 2019-10-15 09:11
窗口切换的时候先调用GUI_EndDialog(pMsg->hWin, 0)函数来关闭当前窗口,然后再调用CreateWindow()创建新 ...

谢谢啦!

嗯嗯,我感觉就是这个原因导致它出现问题的,现在我将它修改了,已经可以使用了。然后我也是使用GUI_Builder编辑的界面,然后用那个程序库去查看,再移植到单片机里面。我第一次接触STemwin。
coshi 发表于 2019-11-13 13:19 | 显示全部楼层
问题好奇怪啊
晓伍 发表于 2019-11-13 13:49 | 显示全部楼层
恭喜楼主解决问题
磨砂 发表于 2019-11-13 13:52 | 显示全部楼层
看完之后我也明白了
 楼主| 19996 发表于 2019-11-18 11:36 | 显示全部楼层
 楼主| 19996 发表于 2019-11-18 11:36 | 显示全部楼层
晓伍 发表于 2019-11-13 13:49
恭喜楼主解决问题

哎!没解决,只是避开了这个问题而已
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

139

帖子

0

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