- ベストアンサー
サイズ変更したフォームのサイズと位置を設定・取得したい方法
- プログラムを起動したフォーム(ウィンドウ)のサイズと位置を変更して、最大化した後で、元のウィンドウのサイズと位置を取得する方法を教えてください。
- また、最大化されている状態で、元のウィンドウに戻した時のサイズと位置を設定する方法も知りたいです。
- 一瞬表示する必要のないウィンドウを表示せずに、内部だけでサイズと位置を取得・設定する方法も教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
http://www.microsoft.com/japan/msdn/net/general/win32map.asp GetWindowPlacement SetWindowPlacement の情報があります。 System.Windows.Forms.Form.Bounds これでもしかしたらできるのかも知れませんが、、、 私の環境は .NET2002 Framework1.0 のせいなのかどうかわかりませんが、このクラスを使えませんでした。 なのでAPIをそのまま利用する方法の情報を記します。 http://www.winapi-database.com/Window/Change/GetWindowPlacement.html http://www.winapi-database.com/Window/Change/SetWindowPlacement.html http://www.winapi-database.com/Struct/WINDOWPLACEMENT.html Private Enum Flags_WPF WPF_SETMINPOSITION = &H1 WPF_RESTORETOMAXIMIZED = &H2 End Enum Private Enum showCmd_SW SW_HIDE = 0 SW_SHOWNORMAL = 1 SW_SHOWMINIMIZED = 2 SW_SHOWMAXIMIZED = 3 SW_SHOWNOACTIVATE = 4 SW_SHOW = 5 SW_MINIMIZE = 6 SW_SHOWMINNOACTIVE = 7 SW_SHOWNA = 8 SW_RESTORE = 9 End Enum Private Structure RECT Dim Left As Integer Dim Top As Integer Dim Right As Integer Dim Bottom As Integer End Structure Private Structure WINDOWPLACEMENT Dim Length As Integer Dim Flags As Flags_WPF Dim showCmd As showCmd_SW Dim ptMinPosition As Point Dim ptMaxPosition As Point Dim rcNormalPosition As RECT End Structure Private Declare Auto Function GetWindowPlacement Lib "user32" ( _ ByVal hWnd As IntPtr, _ ByRef lpwndpl As WINDOWPLACEMENT _ ) As Boolean Private Declare Auto Function SetWindowPlacement Lib "user32" ( _ ByVal hWnd As IntPtr, _ ByRef lpwndpl As WINDOWPLACEMENT _ ) As Boolean Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim l_ptr As IntPtr = Me.Handle Dim l_WINDOWPLACEMENT As WINDOWPLACEMENT Dim l_blnRet As Boolean '構造体のサイズ情報を格納 l_WINDOWPLACEMENT.Length = Marshal.SizeOf(GetType(WINDOWPLACEMENT)) '取得実行 l_blnRet = GetWindowPlacement(l_ptr, l_WINDOWPLACEMENT) If Not l_blnRet Then MsgBox("取得失敗") Return End If '通常サイズ時の情報デッバグ With l_WINDOWPLACEMENT.rcNormalPosition Console.WriteLine(Join(New String() {.Left, .Top, .Right, .Bottom}, vbTab)) End With '各情報の指定 With l_WINDOWPLACEMENT '最大表示を指定 .showCmd = showCmd_SW.SW_SHOWMAXIMIZED '通常表示時のポジショニングを指定 With .rcNormalPosition .Left = 0 .Top = 0 .Right = 300 .Bottom = 500 End With End With '設定実行 l_blnRet = SetWindowPlacement(l_ptr, l_WINDOWPLACEMENT) If Not l_blnRet Then MsgBox("設定失敗") Return End If End Sub
お礼
詳しいお返事たいへんありがとうございます。 こんなに複雑な処理が必要とは思っていませんでした。 これから試してみたいと思います。ありがとうございます。