OpenEdv-开源电子网

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

EMWIN 两个界面切换问题

[复制链接]

11

主题

68

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
322
金钱
322
注册时间
2015-4-5
在线时间
35 小时
发表于 2015-12-29 21:36:15 | 显示全部楼层 |阅读模式
10金钱
问题1:我现在的方法是:A框架里的某个按键按下以后 在框架的回调函数里删除当前窗口 创建B窗口。B框架窗口处理方法相同,但现在发现互相切换多了 会越来越卡 最后直接卡死。而且指示灯也不闪了,系统卡死了。请问是什么问题 或者说有什么其他切换屏幕的方法。问题2:有的界面删除后会卡死,有些却没事为什么?
问题3:我用的8875 优化了画点 读点 画块 16Bpp 发现刷屏还是能看出来 尤其开启存储设备以后会更厉害。怎么解决?
问题4:输入焦点在控件之间移动时会留下一点痕迹 一条一条的 有些控件之间会 有些却不会出现,怎么回事谢谢。

初学者,您的帮助可能让小弟少走很多弯路。非常感谢!!!

最佳答案

查看完整内容[请看2#楼]

我自己来解决一下啊,这种问题的原因主要是为创建或已经删除的窗口的句柄又被使用了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

68

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
322
金钱
322
注册时间
2015-4-5
在线时间
35 小时
 楼主| 发表于 2015-12-29 21:36:16 | 显示全部楼层
我自己来解决一下啊,这种问题的原因主要是为创建或已经删除的窗口的句柄又被使用了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-12-29 22:46:58 | 显示全部楼层
帮顶
回复

使用道具 举报

18

主题

422

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1139
金钱
1139
注册时间
2014-5-24
在线时间
116 小时
发表于 2015-12-30 10:02:42 | 显示全部楼层
通常是因为控件删除不彻底,造成内存泄漏了。
I See Fire.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.  只给方向,不妨碍思考
回复

使用道具 举报

11

主题

68

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
322
金钱
322
注册时间
2015-4-5
在线时间
35 小时
 楼主| 发表于 2015-12-30 10:46:28 | 显示全部楼层
emWin 发表于 2015-12-30 10:02
通常是因为控件删除不彻底,造成内存泄漏了。

我现在发现换成WM_DeleteWindow()就好了。而GUI_EndDialog就卡死
回复

使用道具 举报

70

主题

6697

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12687
金钱
12687
注册时间
2012-11-26
在线时间
3710 小时
发表于 2015-12-30 10:53:56 | 显示全部楼层
科大小青年 发表于 2015-12-30 10:46
我现在发现换成WM_DeleteWindow()就好了。而GUI_EndDialog就卡死

GUI_EndDialog,估计只是隐藏控件,而不删除占有的资源

没研究过,楼主可以查查是不是这样
学无止境
回复

使用道具 举报

11

主题

68

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
322
金钱
322
注册时间
2015-4-5
在线时间
35 小时
 楼主| 发表于 2015-12-31 10:02:07 | 显示全部楼层
科大小青年 发表于 2015-12-30 10:46
我现在发现换成WM_DeleteWindow()就好了。而GUI_EndDialog就卡死

HardFault_Handler\
                PROC
                EXPORT  HardFault_Handler          [WEAK]
                B       .
                ENDP
你好,老是硬件发现还是容易硬件错误 这是咋回事
回复

使用道具 举报

11

主题

68

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
322
金钱
322
注册时间
2015-4-5
在线时间
35 小时
 楼主| 发表于 2015-12-31 10:21:09 | 显示全部楼层
jermy_z 发表于 2015-12-30 10:53
GUI_EndDialog,估计只是隐藏控件,而不删除占有的资源

没研究过,楼主可以查查是不是这样

HardFault_Handler\
                PROC
                EXPORT  HardFault_Handler          [WEAK]
                B       .
                ENDP
你好,老是硬件发现还是容易硬件错误 这是咋回事


WM_DeleteWindow()
描述
删除指定窗口。
原型
void WM_DeleteWindow(WM_HWIN hWin);
其他信息
删除窗口前,它接收一条 WM_DELETE 消息。此消息通常用于删除所使用的任何对象 (小工具),并
释放窗口动态分配的内存。
如果指定的窗口具有任何现有子窗口,则在删除窗口前自动删除这些子窗口。因此不必分别删除子窗口。
窗口删除前,会发送一条 WM_NOTIFICATION_CHILD_DELETED 消息到其父窗。
我用guibuilder创建 删除的时候直接用这个函数删除,句柄为创建时返回的句柄 会不会有问题
回复

使用道具 举报

11

主题

68

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
322
金钱
322
注册时间
2015-4-5
在线时间
35 小时
 楼主| 发表于 2016-1-2 13:20:13 | 显示全部楼层
切换卡死的毛病找到了 是删除以后又使用了。所有以后大家碰到再碰到这毛病一定要找找句柄是不是又使用了
回复

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2015-2-7
在线时间
8 小时
发表于 2016-1-2 16:31:03 | 显示全部楼层
还有没有其它的办法实现呀??  如果一个界面中有控件需要保存当前状态,那么重新创建时又得恢复到原来的状态,如果界面比较多,这样处理不太方便啊。
回复

使用道具 举报

11

主题

68

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
322
金钱
322
注册时间
2015-4-5
在线时间
35 小时
 楼主| 发表于 2016-1-2 22:47:37 来自手机 | 显示全部楼层
wzw123 发表于 2016-1-2 16:31
还有没有其它的办法实现呀??  如果一个界面中有控件需要保存当前状态,那么重新创建时又得恢复到原来的状 ...

我现在是用几个变量保存状态,来还原的
回复

使用道具 举报

11

主题

68

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
322
金钱
322
注册时间
2015-4-5
在线时间
35 小时
 楼主| 发表于 2016-1-2 22:49:37 来自手机 | 显示全部楼层
emWin 发表于 2015-12-30 10:02
通常是因为控件删除不彻底,造成内存泄漏了。

那光标移动留下杠杠是咋回事呢
回复

使用道具 举报

42

主题

208

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
383
金钱
383
注册时间
2014-6-12
在线时间
35 小时
发表于 2016-3-10 16:13:34 | 显示全部楼层
你好,我最近在做这个的时候也遇到了这个问题,不过加WM_DeleteWindow(WM_HWIN hWin);还是没解决,方便说下扣扣不
回复

使用道具 举报

11

主题

68

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
322
金钱
322
注册时间
2015-4-5
在线时间
35 小时
 楼主| 发表于 2016-3-14 08:57:22 | 显示全部楼层
郭刘阳 发表于 2016-3-10 16:13
你好,我最近在做这个的时候也遇到了这个问题,不过加WM_DeleteWindow(WM_HWIN hWin);还是没解决,方便说下 ...

1090640882 这种问题一般是句柄的事
回复

使用道具 举报

18

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
419
金钱
419
注册时间
2015-8-22
在线时间
82 小时
发表于 2016-3-16 23:53:31 | 显示全部楼层
  这个问题 开始我也遇见了   我的方法是 首先  相互调用时     先
GUI_EndDialog(pMsg->hWin, 0);       
  WM_DeleteWindow(pMsg->hWin);   //删除窗口  释放内存
然后再使用创建函数      
回复

使用道具 举报

42

主题

208

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
383
金钱
383
注册时间
2014-6-12
在线时间
35 小时
发表于 2016-3-21 19:33:33 | 显示全部楼层
ksi魔杰 发表于 2016-3-16 23:53
这个问题 开始我也遇见了   我的方法是 首先  相互调用时     先
GUI_EndDialog(pMsg->hWin, 0);       
  W ...

问题已经解决了,谢谢哈啊
回复

使用道具 举报

10

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2016-8-25
在线时间
62 小时
发表于 2016-8-29 22:09:04 | 显示全部楼层
楼主,能否发一份源程序。zy246858@163.com   。谢谢!
回复

使用道具 举报

35

主题

172

帖子

0

精华

高级会员

Rank: 4

积分
769
金钱
769
注册时间
2016-3-17
在线时间
178 小时
发表于 2016-9-6 08:45:47 | 显示全部楼层
A框架里的某个按键按下以后 在框架的回调函数里删除当前窗口 创建B窗口。是不是在进去新窗口前必须输出原来的窗口啊?
回复

使用道具 举报

35

主题

172

帖子

0

精华

高级会员

Rank: 4

积分
769
金钱
769
注册时间
2016-3-17
在线时间
178 小时
发表于 2016-9-6 22:17:58 | 显示全部楼层
ksi魔杰 发表于 2016-3-16 23:53
这个问题 开始我也遇见了   我的方法是 首先  相互调用时     先
GUI_EndDialog(pMsg->hWin, 0);       
  W ...

请问这个问题,我也遇到啦。(就只有两个界面进行切换),但还是不行。
GUI_EndDialog(pMsg->hWin, 0);   WM_DeleteWindow(pMsg->hWin); 这两个中的pMsg->hWin和hWin = GUI_CreateDialogBox( )中的hwin是指的同一个句柄吗?
回复

使用道具 举报

20

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
金钱
389
注册时间
2015-10-2
在线时间
59 小时
发表于 2017-1-18 17:30:54 | 显示全部楼层
请问楼主有没有源码,最近也在研究不是很懂
回复

使用道具 举报

5

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
182
金钱
182
注册时间
2019-10-7
在线时间
36 小时
发表于 2020-12-7 22:31:59 | 显示全部楼层
我也遇到了同样的问题,请问问题解决了吗
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 11:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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