我创建了一个没有 Window.Owner
的普通WPF窗口 . 检查其 WindowInteropHelper.Owner
属性时,此窗口设置了所有者句柄 . 我还认识到,拥有的窗口矩形在桌面上的某个位置与每个新窗口级联(使用GetWindowRect) .
谁能告诉我那里发生了什么?如果没有真正的所有者,它是否类似于wpf中的默认行为,用于将启动位置设置为所有者的中心?
问题是,我想区分两种情况,以便能够将窗口置于真实(!)所有者窗口中心或 - 如果没有所有者 - 屏幕中心:
-
窗口所有者是非wpf窗口(例如,如果在vsto插件中使用)
-
没有所有者窗口
如果有人知道如何区分或满足我的要求,我会很高兴:)
最好的问候Lumo
1 回答
Window.Owner
属性仅在父窗口是WPF窗口的情况下有效 . 由于窗口的整个父子结构由操作系统处理,因此很有可能在不同框架的窗口之间 Build 这种关系 .因此,如果您能够使用
WindowInteropHelper
检索窗口句柄,您就知道有一个所有者窗口 . 但它可能是本机窗口或Windows窗体窗口 .由于您只需要所有者窗口的边界框,因此您可以轻松使用Windows API来获取边界框 . 您想要使用的功能是:GetWindowRect
我假设您使用的是托管语言,如C#或VB.net,因此有一个示例如何使用C#访问该函数:
函数所需的句柄是使用
WindowInteropHelper
获取的窗口句柄 .如果您的句柄没有指向窗口,该函数将返回
false
. 在这种情况下,您的句柄无效或为空 . 在这种情况下,您必须回退到屏幕大小以使窗口居中 .EDIT 1: 由于我完全误解了实际问题,这是另一个想法 . 有一个帮助器"window"句柄始终覆盖整个屏幕 . 如果我正确理解了该概念,则桌面上显示的窗口始终会附加到此桌面窗口 . 您可以使用GetDesktopWindow函数获取句柄 .