的Window.Owner
屬性只適用於情況下,父窗口是一個WPF窗口。由於windows的整個父子結構是由操作系統處理的,所以很可能在不同框架的窗口之間建立這種關係。
因此,如果您能夠使用WindowInteropHelper
檢索窗口句柄,您知道有一個所有者窗口。但它可能是本機窗口或Windows窗體窗口。
由於您只需要所有者窗口的邊界框,因此您可以輕鬆使用Windows API來獲取邊界框。要使用該功能是:GetWindowRect
我假設你使用的是像C#託管語言或VB.net於是就有了例如如何使用C#訪問功能:
[DllImport("user32.dll", SetLastError = true)]
static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
[StructLayout(LayoutKind.Sequential)]
public struct RECT {
public int Left;
public int Top;
public int Right;
public int Bottom;
}
的處理您需要的功能是您使用WindowInteropHelper
獲取的窗口句柄。
如果你的手柄沒有指向一個窗口,該函數將返回false
。在這種情況下,您的句柄無效或爲空。在這種情況下,你必須回到屏幕大小的中心位置。
編輯1:由於我完全誤解了實際問題,這裏是另一個想法。有一個總是覆蓋整個屏幕的助手「窗口」句柄。如果我正確理解該概念,則桌面上顯示的窗口始終附加到此桌面窗口。您可以使用GetDesktopWindow
函數獲取句柄。
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr GetDesktopWindow();
我覺得你沒有明白這一點。我已經使用過GetWindowRect,並且它返回true,雖然我沒有設置窗口的父窗口。 正如我在我的問題中寫的那樣,rect是級聯的。 無論如何您的答案! – Lumo
現在我明白了。是否有可能得到「DesktopWindow」的句柄?有一個支持窗口句柄總是覆蓋整個屏幕。您可以使用GetDesktopWindow函數獲取句柄。也許這有助於找出什麼是窗口的真正父母? – Nitram
我檢查了DesktopWindow指針,它是一個不同的指針。 每個新窗口都有另一個所有者句柄,並且這個新所有者窗口被級聯。 這不是WPF中窗口的默認行爲嗎? – Lumo