• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:サイズ変更したフォームのサイズと位置を設定・取得したいです。)

サイズ変更したフォームのサイズと位置を設定・取得したい方法

このQ&Aのポイント
  • プログラムを起動したフォーム(ウィンドウ)のサイズと位置を変更して、最大化した後で、元のウィンドウのサイズと位置を取得する方法を教えてください。
  • また、最大化されている状態で、元のウィンドウに戻した時のサイズと位置を設定する方法も知りたいです。
  • 一瞬表示する必要のないウィンドウを表示せずに、内部だけでサイズと位置を取得・設定する方法も教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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

popopompom
質問者

お礼

詳しいお返事たいへんありがとうございます。 こんなに複雑な処理が必要とは思っていませんでした。 これから試してみたいと思います。ありがとうございます。