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

什么是模态窗口?本文带你了解模态窗口的本质

如果你希望在模态窗口之上做更多的事情,或者自己实现一套模态窗口类似的机制,那么你可能需要了解模态窗口的本质。 本文不会太深,只是从模态窗口一词出发,抵达大家都熟知的一些知识为止。...---- 开发中的模态窗口 在各种系统、语言和框架中,只要有用户可以看见的界面,都存在模态窗口的概念。...模态窗口的三个特点 如果你希望自己搞一套模态窗口出来,那么只需要满足这三点即可。你可以随便加戏但那都无关紧要。...实现模态窗口 对于 Windows 操作系统来说,模态窗口并不是一个单一的概念,你并不能仅通过一个 API 调用就完成显示模态窗口,你需要在不同的时机调用不同的 API 来完成一个模态窗口。...关于 WPF 框架是如何实现模态窗口的,可以阅读:直击本质:WPF 框架是如何实现模态窗口的 关于如何自己实现一个跨越线程/进程边界的模态窗口,可以阅读:实现 Windows 系统上跨进程/跨线程的模态窗口

1.3K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    关闭模态窗口后,父窗口居然跑到了其他窗口的后面

    弹出一个模态窗口,然后将模态窗口的父窗口设置为自身窗口; 切换到其他程序窗口中(比如 Windows 资源管理器窗口); 切换回此模态窗口,然后关闭这个模态窗口上。...你会发现,模态窗口关闭后,父窗口并没有回到当前的顶层显示中。取而代之的,是其他程序的窗口(比如 Windows 资源管理器窗口)。...然后,回到模态窗口中,把它关掉: ? 我们期待模态窗口关掉后,它的父窗口会在顶层继续供我们操作,但实际上,Windows 资源管理器却成为了顶层,我们的程序“掉下去了”: ?...而这本书作者推荐的方法是: 重新激活所有者窗口 销毁模态对话框 于是,我试着监听模态窗口的 Closing 事件,在其中写下主窗口的激活调用,自此 BUG 才算解决。...或者统一模态窗口窗口样式,在样式中解决这个 BUG,这样,所有使用了此窗口样式的模态窗口也将解决问题。

    9.4K20

    WPF 解决弹出模态窗口关闭后,主窗口不在最前

    本文告诉大家如何解决这个问题,在 WPF 的软件,弹出一个模态窗口。使用另一个窗口模态窗口前面。从任务栏打开模态窗口。关闭模态窗口。这时发现,主窗口会在刚才使用的另一个窗口下面。...因为模态窗口会在关闭的时候,让主窗口不在最前,所以团队不敢使用模态窗口。 但是这个问题在看了 Windows 历史之后,才发现这个问题是 Windows 的问题。...在窗口关闭的时候,Windows 会找一个在这个窗口下方的第一个可用的窗口,激活他。因为弹出模态窗口的主窗口是被禁用的。...实际上只需要在模态窗口关闭之前,激活主窗口就可以。...参见 关闭模态窗口后,父窗口居然跑到了其他窗口的后面

    5.3K30

    WPF 解决弹出模态窗口关闭后,主窗口不在最前

    本文告诉大家如何解决这个问题,在 WPF 的软件,弹出一个模态窗口。使用另一个窗口模态窗口前面。从任务栏打开模态窗口。关闭模态窗口。这时发现,主窗口会在刚才使用的另一个窗口下面。...因为模态窗口会在关闭的时候,让主窗口不在最前,所以团队不敢使用模态窗口。 但是这个问题在看了 Windows 历史之后,才发现这个问题是 Windows 的问题。...在窗口关闭的时候,Windows 会找一个在这个窗口下方的第一个可用的窗口,激活他。因为弹出模态窗口的主窗口是被禁用的。...实际上只需要在模态窗口关闭之前,激活主窗口就可以。...参见 关闭模态窗口后,父窗口居然跑到了其他窗口的后面 ----

    14.8K20

    WPF 解决弹出模态窗口关闭后,主窗口不在最前

    本文告诉大家如何解决这个问题,在 WPF 的软件,弹出一个模态窗口。使用另一个窗口模态窗口前面。从任务栏打开模态窗口。关闭模态窗口。这时发现,主窗口会在刚才使用的另一个窗口下面。...因为模态窗口会在关闭的时候,让主窗口不在最前,所以团队不敢使用模态窗口。 但是这个问题在看了 Windows 历史之后,才发现这个问题是 Windows 的问题。...在窗口关闭的时候,Windows 会找一个在这个窗口下方的第一个可用的窗口,激活他。因为弹出模态窗口的主窗口是被禁用的。...实际上只需要在模态窗口关闭之前,激活主窗口就可以。...参见 关闭模态窗口后,父窗口居然跑到了其他窗口的后面

    5.8K10

    窗口

    窗口的边界上的点也属于该窗口窗口之间有层次的区别,在多于一个窗口重叠的区域里,只会显示位于顶层的窗口里的内容。   ...当你点击屏幕上一个点的时候,你就选择了处于被点击位置的最顶层窗口,并且这个窗口就会被移到所有窗口的最顶层,而剩余的窗口的层次顺序不变。如果你点击的位置不属于任何窗口,则系统会忽略你这次点击。   ...如果该次鼠标点击选择了一个窗口,则输出这个窗口的编号(窗口按照输入中的顺序从 1 编号到 N);如果没有,则输出”IGNORED”(不含双引号)。...第二次点击的位置只属于第 1 个窗口,因此该次点击选择了此窗口并将其置于顶层。现在的三个窗口的层次关系与初始状态恰好相反了。   ...第三次点击的位置同时属于三个窗口的范围,但是由于现在第 1 个窗口处于顶层,它被选择。   最后点击的 (0, 5) 不属于任何窗口

    80020

    【Unity3D】Unity 编辑器窗口布局 ( 创建 Unity3D 项目 | 添加物体 | 层级窗口 | 场景窗口 | 游戏窗口 | 属性窗口 | 项目窗口 | 控制台窗口 | 窗口位置修改 )

    4、Scene 场景窗口 5、Game 游戏窗口 6、Inspector 属性窗口 7、Project 项目窗口 8、Console 控制台窗口 9、窗口位置修改 10、设置字体大小 一、在 Unity...; 4、Scene 场景窗口 在编译游戏时 , 主要是在 Scene 场景窗口 进行编辑操作 , 下图中红色矩形框中就是场景窗口 ; 5、Game 游戏窗口 运行游戏 时 , 是在 Game 游戏窗口...中运行的 , 下图中红色矩形框中就是游戏窗口 ; 6、Inspector 属性窗口 Inspector 属性窗口 又称为 检查器窗口 , 用于显示 当前选中物体 的 具体属性 , 下图中红色矩形框中就是...属性窗口 ; 7、Project 项目窗口 Project 项目窗口 中 显示项目中的文件 , 包括 C# 代码脚本 , 资源 , 图片 , 音频 等文件 , 下图中红色矩形框中是项目窗口 ; 8...、Console 控制台窗口 在开发时 , 如果需要调试 , 可以在 Console 控制台窗口 打印输出数据 , 下图中红色矩形框中是 控制台窗口 ; 9、窗口位置修改 上述窗口的位置是可以随意拖动修改的

    3.2K20

    win10 uwp 设置启动窗口大小 获取窗口大小 设置启动窗口获得窗口大小

    本文主要说如何设置我们窗口的启动大小,UWP启动窗口大小。...设置启动窗口 设置窗口大小 ApplicationView.PreferredLaunchViewSize = new Size(1000, 1000);...在手机没有用,手机就全屏,其他没用 如果设置过屏幕大小导致了每次开启窗口都变小,那么可以简单使用(下面代码没有测试) ApplicationView.PreferredLaunchWindowingMode...,其实使用下面代码 窗口最小 ApplicationView.GetForCurrentView().SetPreferredMinSize(new Size(200, 100)); 获得窗口大小 Window.Current.Bounds.Width...获取窗口高度 Window.Current.Bounds.Height 但是如果我们需要判断我们的窗口大小变化的话,一个简单的方法,使用动态适应 <VisualStateManager.VisualStateGroups

    4.2K20

    win10 uwp 设置启动窗口大小 获取窗口大小 设置启动窗口获得窗口大小

    本文主要说如何设置我们窗口的启动大小,UWP启动窗口大小。...设置启动窗口 设置窗口大小 ApplicationView.PreferredLaunchViewSize = new Size(1000, 1000);...在手机没有用,手机就全屏,其他没用 如果设置过屏幕大小导致了每次开启窗口都变小,那么可以简单使用(下面代码没有测试) ApplicationView.PreferredLaunchWindowingMode...,其实使用下面代码 窗口最小 ApplicationView.GetForCurrentView().SetPreferredMinSize(new Size(200, 100)); 获得窗口大小 Window.Current.Bounds.Width...获取窗口高度 Window.Current.Bounds.Height 但是如果我们需要判断我们的窗口大小变化的话,一个简单的方法,使用动态适应 <VisualStateManager.VisualStateGroups

    5.3K20

    直击本质:WPF 框架是如何实现模态窗口

    想知道你在 WPF 编写 Window.ShowDialog() 之后,WPF 框架是如何帮你实现模态窗口的吗? 本文就带你来了解这一些。...---- Window.ShowDialog WPF 显示模态窗口的方法就是 Window.ShowDialog,因此我们直接进入这个方法查看。...Window.ShowDialog 的源代码可以在这里查看: Window.cs 这个方法非常长,所以我只把其中与模态窗口最关键的代码和相关注释留下,其他都删除(这当然是不可编译的): 1 2 3 4...不要紧,我再简化一下: EnumThreadWindows 获取当前线程的所有窗口 把当前线程中的所有窗口都禁用掉(用的是 Win32 API 的禁用哦,这不会导致窗口内控件的样式变为禁用状态) 将窗口显示出来...可以在这里(ComponentDispatcherThread.cs)看它的代码,实际上是为了模态计数以及引发事件的,对模态的效果没有本质上的影响。

    58230

    TCP 滑动窗口窗口缩放因子

    另外为了跟踪已经发送了的数据在发送端有TCP发送缓存,在接受端有接受缓存,滑动窗口则是这个缓存的一部分,接收方接受数据后会把ack和当前滑动窗口可用空间告诉发送方,发送方则发送的数据不能超过接收方剩余窗口大小...,如果接收方窗口内数据还没来得及由应用程序读取,窗口满了,则发送方会停止发送数据,直到接收方滑动窗口有空间。...假设MSS为1460字节,主机A可以在耗尽主机B的接收窗口之前发送22个段。 当确认收到主机A发送的数据时,主机B可以调整其窗口大小。...创建TCP窗口缩放以解决此问题。 三、窗口缩放因子 窗口缩放在RFC 1072中引入并在RFC 1323中进行了改进。实际上,窗口缩放只是将16位窗口字段扩展为32位长度。...可以通过修改TCP标头中的窗口字段的值来动态调整窗口大小,但是在TCP连接的持续时间内,标度乘数保持静态。仅当两端都包含选项时,缩放才有效;如果只有连接的一端支持窗口缩放,则不会在任一方向上启用它。

    3.5K30
    领券