#379 フォームのサイズ状態(通常/最大化/最小化)を調べるには? フォーム、API

フォームのウィンドウサイズがどのような状態にあるか、つまり、通常サイズか、最大化されているか最小化(アイコン化)されているかをWindows APIの「GetWindowPlacement関数」を使って取得する方法を紹介します。

それには以下のコードをそのままフォームのモジュールに記述します。DeclarationsセクションではWindows APIを使うための各種宣言を行っています。そして、ウィンドウのサイズが変わったとき、すなわちResizeイベントが発生したときにGetWindowPlacement関数を呼び出し、そのときのウィンドウの状態をメッセージボックスで表示しています。


Option Compare Database
Option Explicit

Private Declare Function GetWindowPlacement Lib "user32" _
                         (ByVal hWnd As Long, _
                         lpwndpl As WINDOWPLACEMENT) As Long
Private Type POINT
  X As Long
  Y As Long
End Type

Private Type RECT
  Left   As Long
  Top    As Long
  Right  As Long
  Bottom As Long
End Type

Private Type WINDOWPLACEMENT
  Length    As Long
  Flg       As Long
  ShowCmd   As Long
  MinPos    As POINT
  MaxPos    As POINT
  NormalPos As RECT
End Type

Private Const SW_SHOWNORMAL = 1
Private Const SW_SHOWMINIMIZED = 2
Private Const SW_SHOWMAXIMIZED = 3

Private Sub Form_Resize()
'フォームのサイズ変更時

  Dim lngHwnd As Long
  Dim udtWindowPlacement As WINDOWPLACEMENT

  'このフォームのウィンドウハンドルを取得
  lngHwnd = Me.hWnd
  'WINDOWPLACEMENT構造体のサイズを設定
  udtWindowPlacement.Length = Len(udtWindowPlacement)
  'ウィンドウの状態を取得して構造体にセット
  GetWindowPlacement lngHwnd, udtWindowPlacement
  '構造体よりウィンドウの状態を取得
  With udtWindowPlacement
    Select Case .ShowCmd
      Case SW_SHOWNORMAL
        MsgBox "通常サイズです!"
      Case SW_SHOWMINIMIZED
        MsgBox "アイコン化されています!"
      Case SW_SHOWMAXIMIZED
        MsgBox "最大化されています!"
    End Select
  End With

End Sub


最小化したとき:
最小化したとき

通常サイズにしたとき:
通常サイズにしたとき

最大化したとき:
最大化したとき
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved