AdjustWindowRectEx

機能
クライアント領域の矩形サイズを指定してウィンドウのサイズを取得
Declare Function AdjustWindowRectEx Lib "user32.dll"  _
(lpRect as RECT, ByVal dwStyle As Long, ByVal bMenu As Long, _
ByVal dwExStyle As Long) As Long
Declare Function AdjustWindowRectEx Lib "user32.dll"  _
(lpRect as RECT, ByVal dwStyle As Integer, _
ByVal bMenu As Integer, ByVal dwExStyle As Integer) As Integer

BOOL AdjustWindowRectEx(
LPRECT lpRect,
DWORD dwStyle,
BOOL bMenu,
DWORD dwExStyle
);
引数
lpRect

関数実行時にクライアント領域のサイズを指定
(GetClientRect()関数を使って取得)
関数実行後、データを受け取るためのRECT構造体
wStyle
サイズを計算するために、ウィンドウの通常スタイルを指定
(GetWindowLong()関数を使って取得)
bMenu
メニューがあるとき1
dwExStyle
サイズを計算するために、ウィンドウの拡張ウィンドウスタイルを指定
(GetWindowLong()関数を使って取得)
戻り値
正常終了のとき  0以外
エラーのとき  0
備考
ウィンドウのサイズは、クライアント領域と非クライアント領域を含む。
ただし、メニューバーが複数のときは高さの付加分は含まない。
サンプル
ダウンロード(AdjustWindowRectEx.lzh 2.33KB)

Private Sub Timer1_Timer()
Dim rc As Long
Dim lpRect As RECT, dwStyle As Long, dwExStyle As Long
Dim Temp As String
Dim Pos As PointApi, hWnd As Long

'現在のマウス位置を取得

rc = GetCursorPos(Pos)
'現在のマウス位置にあるウィンドウのハンドル取得
hWnd = WindowFromPoint(Pos.X, Pos.Y)

'ウインドウの通常スタイル
dwStyle = GetWindowLong(hWnd, GWL_STYLE)

'ウインドウの拡張スタイル
dwExStyle = GetWindowLong(hWnd, GWL_EXSTYLE)

'クライアント領域のサイズを得る
rc = GetClientRect(hWnd, lpRect)

'ウィンドウのキャプションを取得する
Temp = String(256, Chr(0))
Call GetWindowText(hWnd, Temp, 256)
a = InStr(Temp, Chr(0))
If a > 1 Then
    Temp = Mid(Temp, 1, a - 1)
Else
    Temp = ""
End If

With Me.List1
    .Clear
    .AddItem Temp
    .AddItem ""
    .AddItem "クライアント領域"
    .AddItem "  Left    :" + Str(lpRect.Left)
    .AddItem "  Top     :" + Str(lpRect.Top)
    .AddItem "  Right   :" + Str(lpRect.Right)
    .AddItem "  Bottom  :" + Str(lpRect.Bottom)
    .AddItem ""
End With

'ウィンドウサイズを取得
rc = AdjustWindowRectEx(lpRect, dwStyle, 0, dwExStyle)

With Me.List1
    .AddItem "ウィンドウ領域"
    .AddItem "  Left    :" + Str(lpRect.Left)
    .AddItem "  Top     :" + Str(lpRect.Top)
    .AddItem "  Right   :" + Str(lpRect.Right)
    .AddItem "  Bottom  :" + Str(lpRect.Bottom)
End With
End Sub