2016-04-05 19 views
0

私のwpfインターフェイスの位置を取得したいと思います。このコードはC#2.0でも動作しますが、C#4.0でエラーを報告します。ここにコードがあります。wpfのGetWindowRect

[DllImport("user32.dll")] 
    [return: MarshalAs(UnmanagedType.Bool)] 
    static extern bool GetWindowRect(HandleRef hWnd, out RECT lpRect); 
    [StructLayout(LayoutKind.Sequential)] 
    public struct RECT 
    { 
     public int Left;   
     public int Top;   
     public int Right;  
     public int Bottom;  
    } 

    Rectangle myRect = new Rectangle(); 

    private void button1_Click(object sender, System.EventArgs e) 
    { 
     RECT rct; 

     if(!GetWindowRect(new HandleRef(this, this.Handle), out rct)) //Here is the error 
     { 
      MessageBox.Show("ERROR"); 
      return; 
     } 
     MessageBox.Show(rct.ToString()); 

     myRect.X = rct.Left; 
     myRect.Y = rct.Top; 
     myRect.Width = rct.Right - rct.Left + 1; 
     myRect.Height = rct.Bottom - rct.Top + 1; 
    } 
+0

何**です**エラーコード? – Stormie

+0

エラーは何ですか? – krlzlx

+0

エラーは "ハンドル"の定義に含まれていません。 – HaoHuaqing

答えて

0

あなたは上でより多くのドキュメントを見つけることができます

if(!GetWindowRect(new HandleRef(this, new WindowInteropHelper(this).Handle), out rct)) 

(WPFのために)このように、ハンドルを取得する

WindowInteropHelper(); 

を使用する必要があります。https://msdn.microsoft.com/fr-fr/library/system.windows.interop.windowinterophelper%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

+0

ありがとう!便利な答えです。 – HaoHuaqing