What is the correct way to retrieve a window\'s position in WPF?
Here\'s some attempts I made. First attempt, the obvious
Point GetPosition(Window wi
Here's a solution that builds on P/Invoke of GetWindowRect, but uses extension methods to make your code look nicer. You use myWindow.ActualTop() and myWindow.ActualLeft() in your code.
static class WindowExtensions
{
[StructLayout(LayoutKind.Sequential)]
struct RECT
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
public static double ActualTop(this Window window)
{
switch (window.WindowState)
{
case WindowState.Normal:
return window.Top;
case WindowState.Minimized:
return window.RestoreBounds.Top;
case WindowState.Maximized:
{
RECT rect;
GetWindowRect((new WindowInteropHelper(window)).Handle, out rect);
return rect.Top;
}
}
return 0;
}
public static double ActualLeft(this Window window)
{
switch (window.WindowState)
{
case WindowState.Normal:
return window.Left;
case WindowState.Minimized:
return window.RestoreBounds.Left;
case WindowState.Maximized:
{
RECT rect;
GetWindowRect((new WindowInteropHelper(window)).Handle, out rect);
return rect.Left;
}
}
return 0;
}
}