硬汉嵌入式论坛

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

[emWin] 关于对话框关闭的问题

[复制链接]

2

主题

12

回帖

18

积分

新手上路

积分
18
发表于 2018-2-8 09:26:53 | 显示全部楼层 |阅读模式
在桌面上,有一个按键,点击按键,会创建一个对话框,创建的对话框并没有覆盖到按键,所以,对话框创建后,还可以点击按键,那么问题来了,就是点击后会再创建一个窗口,这时候会出现两个或多个一模一样的对话框,为了避免这个问题,我在创建对话框的文件里定义一个静态变量用来指向创建成功后窗口的句柄,在创建前,先使用WM_IsWindow 判断这个窗口是否有效,无效时才创建,原理上看起来可以,但再实际使用中会发现,当对话框关闭调用GUI_EndDialog后,下次再去进创建页面,使用WM_IsWindow 判断句柄,窗口依然有效。
我怀疑调用GUI_EndDialog后,窗口关闭了,但是其他应用创建窗口时会不会把原来的句柄给占用了,导致静态变量的句柄窗口还是有效的?难道调用GUI_EndDialog后,静态变量那个句柄要清零?大家有没有好的解决方案。
回复

使用道具 举报

20

主题

116

回帖

176

积分

初级会员

积分
176
发表于 2018-2-8 21:31:04 | 显示全部楼层
也碰到过类似的问题,就是在父窗口上新建一个子窗口,接着关闭子窗口。新建(返回子窗口句柄)和关闭(清零子窗口句柄)子窗口是通过判断子窗口的句柄判断的,但是一旦判断时就进入硬件错误,不是哪里的问题。后来直接使用一个全局变量来判断新建和关闭子窗口就可以了。
回复

使用道具 举报

0

主题

138

回帖

138

积分

初级会员

积分
138
QQ
发表于 2018-2-8 22:01:01 | 显示全部楼层
句柄这个东西。。感觉也没有那么高深啊。。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107418
QQ
发表于 2018-2-9 10:11:22 | 显示全部楼层
不好意思,楼主,现在才回复你的问题。

设置成模态窗口就可以了。创建后,这个窗口后面的控件和窗口都是无法触控的。
  1. /*
  2. *********************************************************************************************************
  3. *        函 数 名: App_MusicSet
  4. *        功能说明: 音乐播放对话框的子窗口,用于频谱效果设置
  5. *        形    参: hWin  父窗口
  6. *        返 回 值: 无
  7. *********************************************************************************************************
  8. */
  9. void App_MusicSet(WM_HWIN hWin)
  10. {
  11.         WM_HWIN hWinMusicSet;
  12.        
  13.         /* 创建hWinMusicSet */
  14.         hWinMusicSet = GUI_CreateDialogBox(_aDialogCreateMusicSet,
  15.                                            GUI_COUNTOF(_aDialogCreateMusicSet),
  16.                                            _cbCallbackMusicSet,
  17.                                            hWin,
  18.                                            0,
  19.                                            0);
  20.        
  21.         /* 设置为模态窗口 */
  22.         WM_MakeModal(hWinMusicSet);
  23. }
复制代码
回复

使用道具 举报

2

主题

12

回帖

18

积分

新手上路

积分
18
 楼主| 发表于 2018-2-9 14:53:35 | 显示全部楼层
eric2013 发表于 2018-2-9 10:11
不好意思,楼主,现在才回复你的问题。

设置成模态窗口就可以了。创建后,这个窗口后面的控件和窗口都是 ...

这方法不错,谢谢了
回复

使用道具 举报

6

主题

231

回帖

249

积分

高级会员

积分
249
发表于 2018-2-9 15:05:36 | 显示全部楼层
看过ucgui的代码,销毁的窗口句柄立刻被重用的可能性很大,这个现象是因为ucgui的窗口句柄内存分配策略导致的,不改变这种分配策略是无解的。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-30 23:56 , Processed in 0.170192 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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