プロが教える店舗&オフィスのセキュリティ対策術

プログラムを起動したフォーム(ウィンドウ)のサイズと位置を変更して、
その後最大化した後で、元のウィンドウのサイズと位置を取得したいのですがどのようにしたら良いでしょうか?
また、最大化されている状態で、元のウィンドウにした時になるサイズと位置を設定するにはどうしたら良いでしょうか?

例えば設定時は
Me.SetBounds(0, 0, sizex, sizey, BoundsSpecified.All)
Me.WindowState = FormWindowState.Maximized
と2段階でやれば、最大化しつつ、サイズ変更のウィンドウをあらかじめ設定しておく事が出来るのですが、
一瞬、表示する必要のない1行目のウィンドウが表示されてしまうので、
内部だけで取得、設定したいです。

よろしくおねがいします。m(__)m

A 回答 (1件)

http://www.microsoft.com/japan/msdn/net/general/ …
GetWindowPlacement
SetWindowPlacement
の情報があります。

System.Windows.Forms.Form.Bounds
これでもしかしたらできるのかも知れませんが、、、


私の環境は
.NET2002
Framework1.0
のせいなのかどうかわかりませんが、このクラスを使えませんでした。
なのでAPIをそのまま利用する方法の情報を記します。

http://www.winapi-database.com/Window/Change/Get …
http://www.winapi-database.com/Window/Change/Set …
http://www.winapi-database.com/Struct/WINDOWPLAC …
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
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/04/12 09:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!