硬汉嵌入式论坛

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

[emWin] 关于窗口嵌套的问题

[复制链接]

1

主题

3

回帖

6

积分

新手上路

积分
6
发表于 2019-4-19 16:53:19 | 显示全部楼层 |阅读模式
初学EmWin,最近在中断函数中创建对话框,在对话框回掉函数中设置WM_NOTIFICATION_RELEASED后将对话框删除,结果发现,运行几次后,程序卡死,提示nesting exceeded,其中_cbTouch是我自己建的背景窗口的子窗口的回调函数,对话框中仅有一个button,且仅进行删除窗口操作,感觉不存在窗口嵌套,,而且看了论坛中出现的帖子,按照文中完善WM_NOTIFY_PARENT下的内容也没有能够解决,希望能了解原因,谢谢!
TIM图片20190419104518.png
TIM截图20190419104419.png
TIM截图20190419104237.png
回复

使用道具 举报

1

主题

3

回帖

6

积分

新手上路

积分
6
 楼主| 发表于 2019-4-19 17:00:54 | 显示全部楼层
本帖最后由 梦醒丶 于 2019-4-19 17:02 编辑

在cbTouch创建对话框函数前通过串口打印,发现确实只执行了一次,应该不是抖动的原因,改变内存大小,到达卡死状态的次数也没有改变
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2019-4-19 17:45:40 | 显示全部楼层
注意emWin的程序框架设计
1、最好不要在中断里面做任何emWin操作
2、采用非常阻塞的,主程序里面开一个while大循环,里面仅执行1个GUI_Delay函数,此函数做延迟的同时,也做窗口刷新。
3、需要GUI_EexcCreate之类的阻塞是操作,可以设置个模态就行。
回复

使用道具 举报

1

主题

3

回帖

6

积分

新手上路

积分
6
 楼主| 发表于 2019-4-19 18:40:23 | 显示全部楼层
本帖最后由 梦醒丶 于 2019-4-19 19:05 编辑
eric2013 发表于 2019-4-19 17:45
注意emWin的程序框架设计
1、最好不要在中断里面做任何emWin操作
2、采用非常阻塞的,主程序里面开一个wh ...

感谢您的回复
我这个程序是在官方给的“MOTION_RadialMenu”历程上添加得到的,我仅仅只是创建了个子窗口用来接收屏幕的触碰信息(WM_PID_STATE_CHANGED),识别位图编号后创建相应对话框,并没有在中断中执行任何操作,程序的大框架也没有修改,可能是在回调函数中使用了阻塞式操作的原因。请问除此之外出现这种窗口嵌套可能式什么原因呢?

回复

使用道具 举报

5

主题

582

回帖

597

积分

版主

Rank: 7Rank: 7Rank: 7

积分
597
发表于 2019-4-19 23:09:21 | 显示全部楼层
把例子发上来吧
回复

使用道具 举报

1

主题

3

回帖

6

积分

新手上路

积分
6
 楼主| 发表于 2019-4-20 10:51:03 | 显示全部楼层
本帖最后由 梦醒丶 于 2019-4-20 10:52 编辑

已经解决了,由于我在回调函数中使用了GUI_ExecCreatedDialog()导致程序故障,在while中使用就好了。
回复

使用道具 举报

36

主题

2050

回帖

2158

积分

至尊会员

积分
2158
发表于 2019-4-20 10:55:00 | 显示全部楼层
梦醒丶 发表于 2019-4-20 10:51
已经解决了,由于我在回调函数中使用了GUI_ExecCreatedDialog()导致程序故障,在while中使用就好了。

GUI_ExecCreatedDialog是阻塞式函数,不可以在回调函数里面调用。

当然可以在创建的窗口上,看坛主教程吧。
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-17 21:47 , Processed in 0.258606 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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