首页 新闻 搜索 专区 学院

类似迅雷的悬浮窗体,且不受子窗体showdialog影响

0
悬赏园豆:40 [已解决问题] 解决于 2013-05-08 14:15

我想实现类似迅雷的悬浮窗体,且不受showdialog影响。

现在可以实现始终最前,但是当用showdialog打开一个子窗体时,悬浮窗还是最前,但不能操作了。

有什么办法可以让他不受影响吗?

我开迅雷软件看了下,当你新建任务时,主窗体是不能操作的,而悬浮窗还可以操作。

hjx595的主页 hjx595 | 初学一级 | 园豆:89
提问于:2013-03-27 10:15
< >
分享
最佳答案
0

是不是因为MDI窗体啊,showdialog有父子关系,而你的悬浮窗不给父子关系。

http://www.cnblogs.com/renhaojie/archive/2009/09/10/1564030.html

收获园豆:40
滴答的雨 | 老鸟四级 |园豆:3690 | 2013-03-27 10:25

不是因为父子关系的原因。showdialog()打开的窗体,要等窗体关闭后才能操作其他窗体。

而如果把showdialog改成show(),那就没事了。不过我这里必须用showdialog()。

我现在就想悬浮窗不受这个影响。

hjx595 | 园豆:89 (初学一级) | 2013-03-27 10:48

@hjx595: showdialog是模态窗体,阻塞了消息队列吧。要不试试在showdialog打开的窗体上调用Application.DoEvent()让其执行别的消息试试。http://q.cnblogs.com/q/47023/

滴答的雨 | 园豆:3690 (老鸟四级) | 2013-03-27 11:03

@滴答的雨: 不懂。Application.DoEvent()不是执行消息队列上的任务吗?showdialog()时已经把其他窗体的消息都堵死了,发不出去,怎么可能处理呢。我也试了另开线程启动悬浮窗,但是更新UI还是要回到主线程,消息一样阻塞了。

hjx595 | 园豆:89 (初学一级) | 2013-03-27 15:59

@hjx595: showdialog()阻塞了消息队列,但是如果在showdialog的窗体上开一个辅助线程去以一定方式轮询调用Application.DoEvent()使其他消息得到响应,这样就可以让悬乎窗体上的消息得到处理。(我是这么想的)

滴答的雨 | 园豆:3690 (老鸟四级) | 2013-03-27 16:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册