0


C# 同时置顶窗口层次的解决

我们希望有些窗口需要置顶Topmost = true;但是置顶的窗口多了以后会出现很多麻烦

1.导致层次混乱,同样是置顶,因此相互冲突,运行中会随着焦点的不同发生变化。

2.主窗口打开对话框时,这些置顶窗口依旧在对话框上,不美观也不方便使用,非常影响客户体验。

如果采用动态调整,虽然可以解决,但是会导致代码量增加,而且会解决逻辑判断问题。

其实我们可以使用简单的办法就是嵌入:

SetParent(子窗口, 父窗口);

只是个WinAPI函数,实际中我发现子窗口如果在快速更新中(比如PPT转场效果),如果嵌入到别的窗口(控件),就会导致报错甚至死锁。

因此这个函数是用需要慎重。

调整指定窗口的层次,我现在使用设置窗口“父子”逻辑关系的办法,也就是把上层窗口的“父”属性,指向下层的主窗口。

具体代码:

WindowInteropHelper TopWindow = new WindowInteropHelper(TopWin);
TopWindow.Owner = MainWin.Handle;

上面的代码是用C#实现的,如果有的窗口不是自己的是别的程序的,可以用下面的代码(WInAPI)

SetWindowLong(TopWindows, beiger.GWL_HWNDPARENT, MainWin);

这样,Top窗口在Main窗口上,不会被Main遮挡,也不会出现在Main的对话框上,影响用户操作了。

标签: c#

本文转载自: https://blog.csdn.net/dgnankai/article/details/116263754
版权归原作者 beiger 所有, 如有侵权,请联系我们删除。

“C# 同时置顶窗口层次的解决”的评论:

还没有评论