我希望有人能夠幫助我,我有我的應用程序代碼的方法如下有點讓我一個矩形GetWindowRect返回奇數值
var windowPosition = NativeMethods.GetWindowRect(this._hwnd);
return new Rect(windowPosition.Left, windowPosition.Top, windowPosition.Width, windowPosition.Height);
我在用這個我爲自定義窗口編寫的一些代碼在WPF應用程序中,窗口使用IWindowManager.OpenWindow
打開。
當我運行的代碼,並在打開的窗口,我在windowPosition
對象,它是一個RECT
top = 1466, bottom = 785, left = 26, right = 26, width = 0, height = -681
我看不到會到底是什麼錯誤代碼與這些奇怪得到以下值值在RECT中,因此我在下一行中得到一個ArgumentException
。
我也試着運行這個窗口作爲主應用程序窗口,我遇到同樣的問題,應用程序使用MVVM和Caliburn Micro雖然我不知道爲什麼應該有所作爲。
作爲請求的RECT結構定義如下:
[StructLayout(LayoutKind.Sequential)]
internal struct RECT
{
public void Offset(int dx, int dy)
{
this.Left += dx;
this.Top += dy;
this.Right += dx;
this.Bottom += dy;
}
public int Left { get; set; }
public int Top { get; set; }
public int Right { get; set; }
public int Bottom { get; set; }
public int Width
{
get
{
return this.Right - this.Left;
}
}
public int Height
{
get
{
return this.Bottom - this.Top;
}
}
public POINT Position
{
get
{
return new POINT { x = this.Left, y = this.Top };
}
}
public SIZE Size
{
get
{
return new SIZE { cx = this.Width, cy = this.Height };
}
}
}
和從NativeMethods所述GetWindowRect方法:
[DllImport("user32.dll", EntryPoint = "GetWindowRect", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool GetWindowRectInternal(IntPtr hWnd, out RECT lpRect);
public static RECT GetWindowRect(IntPtr hwnd)
{
RECT rc;
if (!GetWindowRectInternal(hwnd, out rc))
{
throw new Win32Exception(Marshal.GetLastWin32Error());
}
return rc;
}
我使用WindowInteropHelper(window).Handle
訪問hWnd
,我忽略包括來自公衆方法NativeMethods現在已經包含了它,對於浪費時間表示歉意。
RECT沒有寬度或高度屬性,顯着增加了你剛剛宣佈它錯誤的機率。奇怪你沒有發佈相關的代碼。 –
向我們展示瞭如何定義GetWindowRect和RECT結構。 – Dispersia
它是讓上下右上,而不是左上下。 –