首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

关闭模态对话框的正确顺序

调用顺序很重要

如果你想显示一个模态对话框,你需要先将所有者窗口禁用,然后启用模态对话框,当关闭一个模态对话框时,则要确保严格按照相反的流程来进行。

为什么要按照这样的流程呢?

如果你没有按照正确的顺序启用或禁用窗口,则窗口的输入焦点可能会被搞乱。

如果关闭了一个模态对话框,你可能想要这样做:

> 关闭并销毁模态对话框

> 重新启用所有者窗口

但是,如果你按照上面的顺序操作的话,你会发现:所有者窗口将不会像正常的那样在前景激活。它会随机地激活一些其他的窗口。可以显式的调用激活函数来解决这个问题,但是,这种做法会带来窗口的闪烁,并且窗口的Z序也乱了。

到底发生了什么?

当你销毁一个模态对话框时,你是在销毁一个前景激活的窗口。Windows窗口管理器需要找到下一个被激活的窗口。它首先会尝试激活模态对话框的所有者窗口,但是此时所有者窗口被禁用了。

这个时候,Windows窗口管理器会跳过所有者窗口并寻找系统中其他未被激活的窗口。这就是导致出现上述现象的原因。

那么,应该怎么做?

正确的销毁模态对话框的流程如下:

> 启用模态对话框所有者窗口

> 销毁模态对话框

这次,当我们的模态对话框被销毁时,Windows窗口管理器发现所有者窗口是已启用状态,所以它就会将输入焦点设置到所有者窗口并将它激活为前景窗口。

总结

按照上面提到的顺序,可以避免诸如界面闪烁,输入焦点混乱的问题。虽然是一个小知识点,但是也值得一试。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。

本文来自:《The correct order for disabling and enabling windows》

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20201222A0HLD800?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券