ウィンドウサイズとクライアントサイズ          <TOP>


ウィンドウ(フォーム)サイズとクライアントサイズ(フレーム・タイトルの高さなどを差し引いた領域)の設定

AdjustWindowRectEx クライアントサイズぴったりの大きさのウィンドウを作成

GetClientRect ウィンドウのクライアント領域の座標を取得

GetWindowLong 指定されたウィンドウに関しての情報を取得

 

左:WindowsXP    右:Windows2000(ウィンドウサイズが同じでもクライアント領域はこのように異なる)

'================================================================
'= ウィンドウサイズとクライアントサイズ
'=     (AdjustWindowRectEx.Ex)
'================================================================
#include "Windows.bi"

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

' クライアントサイズぴったりの大きさのウィンドウを作成
Declare Function Api_AdjustWindowRectEx& Lib "user32" Alias "AdjustWindowRectEx" (lpRect As RECT, ByVal dsStyle&, ByVal bMenu&, ByVal dwEsStyle&)

' ウィンドウのクライアント領域の座標を取得
Declare Function Api_GetClientRect& Lib "user32" Alias "GetClientRect" (ByVal hWnd&, lpRect As RECT)

' 指定されたウィンドウに関しての情報を取得。また、拡張ウィンドウメモリから、指定されたオフセットにある32ビット値を取得することもできる
Declare Function Api_GetWindowLong& Lib "user32" Alias "GetWindowLongA" (ByVal hWnd&, ByVal nIndex&)

#define GWL_EXSTYLE (-20)               '拡張ウィンドウスタイル
#define GWL_STYLE (-16)                 'ウインドウスタイルを取得

Var Shared Text1 As Object

Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Var mWidth As Long
    Var mHeight As Long
    Var rc As RECT
    Var Ret As Long

    rc.Left = 0
    rc.Top = 0
    rc.Right = 232
    rc.Bottom = 106

    Ret = Api_AdjustWindowRectEx(rc, Api_GetWindowLong(GethWnd, GWL_STYLE), 0, Api_GetWindowLong(GethWnd, GWL_EXSTYLE))

    mWidth = rc.Right - rc.Left
    mHeight = rc.Bottom - rc.Top
    SetWindowSize mWidth, mHeight
End Sub

'================================================================
'=
'================================================================
Declare Sub MainForm_Resize edecl ()
Sub MainForm_Resize()
    Var rc As RECT
    Var Ret As Long

    Ret = Api_GetClientRect(GethWnd, rc)

    Text1.SetWindowText "WindowSize:" & Str$(GetWidth) & " x" & Str$(GetHeight) & Chr$(13, 10) & "ClientRect:" & Str$(rc.Right) & " x" & Str$(rc.Bottom)
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End