C# 2010　最小化時のフォーム座標を取得


最小化時のフォーム座標を保存したいのですが、  
下のコードを実行すると座標がマイナス値になってしまいます。

[code]

    protected override void OnResize(EventArgs e)
    {
        base.OnResize(e);
    
        if(this.WindowState == FormWindowState.Minimized)
        {
            MessageBox.Show(this.Location.ToString());
        }
    }
    
[/code]

最小化する直前の座標を取得するためにはどうすればよいでしょうか。




> 次回起動時のために座標を保存する

「最小化する直前の座標」だけでなく最大化する直前の座標や、マルチモニタ環境でどのモニタに表示されていたのかなども考慮が必要です。更に次回起動時にモニタサイズが縮小されていると画面外に溢れたりなども考慮が必要です。

C#ではありませんがWindows APIの[`GetWindowPlacement`](https://docs.microsoft.com/en-
us/windows/desktop/api/winuser/nf-winuser-
getwindowplacement)を使うとこの辺り一式の値が取得でき、更に[`SetWindowPlacement`](https://docs.microsoft.com/en-
us/windows/desktop/api/winuser/nf-winuser-
setwindowplacement)を使うと一気に復元できます。C#からは`DllImport`を使用して呼び出し可能です。




> 次回起動時のために座標を保存する

「最小化する直前の座標」だけでなく最大化する直前の座標や、マルチモニタ環境でどのモニタに表示されていたのかなども考慮が必要です。更に次回起動時にモニタサイズが縮小されていると画面外に溢れたりなども考慮が必要です。

C#ではありませんがWindows APIの[`GetWindowPlacement`](https://docs.microsoft.com/en-
us/windows/desktop/api/winuser/nf-winuser-
getwindowplacement)を使うとこの辺り一式の値が取得でき、更に[`SetWindowPlacement`](https://docs.microsoft.com/en-
us/windows/desktop/api/winuser/nf-winuser-
setwindowplacement)を使うと一気に復元できます。C#からは`DllImport`を使用して呼び出し可能です。

