在扩展MFC DLL中使用非模态对话框时界面为什么会无响应

时间:2022-04-16 23:26:34
在一个扩展的MFC dll中,使用模态对话框就好好的,而当使用非模态界面时就出现无响应的现象,点击子控件完全无响应,对话框窗口也没法移动。

非模态的创建步骤就是:Create 然后RunModelLoop,这里应该没什么问题吧,而且DoModel里面也是这么搞的。

等待高手指点

6 个解决方案

#1


补充两句;
1.因为特殊业务需要,在RunModelLoop前,我将父窗口EnableWindow(FALSE)了。之前也试过,如果不禁用父窗口那么就不会有上面描述的问题。但是禁用父窗口是业务需要啊,况且DoModel里面也禁用了父窗体。难道我禁用的方式不对?

2.非模态界面弹出后,虽然无法响应鼠标消息,但是按下ESC键仍是可以退出的,这样就说明对话框是有消息的

#2


RunModalLoop不就又是模式对话框了吗?既然用了Create,显示出窗口就行了,什么都不用做,用原有的循环即可

#3


既然要禁用父窗口,那还是使用模态对话框得了,直接调用DoModal

#4


Create完窗口后,需要将窗口扔给客户做处理,这时用户是需要直接操作界面中的,等用户处理完后由我们来显示对话框。


所以就得先创建出界面,然后再启动消息

#5


用模态的吧,之前也做了个这样的dll,而且还碰到非模态窗口释放有问题。模态ok。一直没搞清楚原因。

#6


您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法

#1


补充两句;
1.因为特殊业务需要,在RunModelLoop前,我将父窗口EnableWindow(FALSE)了。之前也试过,如果不禁用父窗口那么就不会有上面描述的问题。但是禁用父窗口是业务需要啊,况且DoModel里面也禁用了父窗体。难道我禁用的方式不对?

2.非模态界面弹出后,虽然无法响应鼠标消息,但是按下ESC键仍是可以退出的,这样就说明对话框是有消息的

#2


RunModalLoop不就又是模式对话框了吗?既然用了Create,显示出窗口就行了,什么都不用做,用原有的循环即可

#3


既然要禁用父窗口,那还是使用模态对话框得了,直接调用DoModal

#4


Create完窗口后,需要将窗口扔给客户做处理,这时用户是需要直接操作界面中的,等用户处理完后由我们来显示对话框。


所以就得先创建出界面,然后再启动消息

#5


用模态的吧,之前也做了个这样的dll,而且还碰到非模态窗口释放有问题。模态ok。一直没搞清楚原因。

#6


您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法