位置構造体によるウィンドウの位置とサイズを更新 <TOP>
AdjustWindowRect クライアント範囲から必要なウィンドウのサイズを得る
BeginDeferWindowPos ウィンドウ位置構造体を作成
DeferWindowPos 複数のウィンドウ位置構造体を更新する
EndDeferWindowPos 複数のウィンドウの位置とサイズを更新する
フォーム設計時のサイズ 240×140
R.Left = 40 ' フォーム左位置40ドット目
R.Top = 50 '
〃 上位置50ドット目
R.RIGHT = 280 '
〃 右位置280ドット目
R.Bottom = 190 ' 〃
下位置190ドット目
寸法の把握を容易にするため10ドット毎に線を引いています。
設計時のフォームと重ねてみる
ウインドウサイズについての参考URL
http://www.arcpit.co.jp/winapi/api_02/ap020201.htm
'================================================================ '= 位置構造体によるウィンドウの位置とサイズを更新
'= (DeferWindowPos.bas) '================================================================ #include "Windows.bi" #define WS_BORDER &H800000 'フォームの枠線がある #define WS_DLGFRAME &H400000 'ダイアログボックスで一般的に使われるスタイルの境界を持つウィンドウを作成する #define WS_THICKFRAME &H40000 'サイズ変更境界を持つウィンドウを作成する #define WS_CAPTION &HC00000 'WS_BORDER Or WS_DLGFRAME #define HWND_BOTTOM 1 'ウインドウをウインドウリストの一番下に配置する #define HWND_NOTOPMOST -2 'ウインドウをウインドウリストの一番上に配置する #define HWND_TOP 0 'ウインドウをZオーダーの一番上に配置する #define HWND_TOPMOST -1 'ウインドウをウインドウリストの一番上に配置する #define SWP_SHOWWINDOW &H40 'ウインドウを表示する Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type ' クライアント範囲から必要なウィンドウのサイズを得る Declare Function Api_AdjustWindowRect& Lib "user32" Alias "AdjustWindowRect" (lpRect As RECT, ByVal dwStyle&, ByVal bMenu&) ' ウィンドウ位置構造体を作成 Declare Function Api_BeginDeferWindowPos& Lib "user32" Alias "BeginDeferWindowPos" (ByVal nNumWindows&) ' 複数のウィンドウ位置構造体を更新する Declare Function Api_DeferWindowPos& Lib "user32" Alias "DeferWindowPos" (ByVal hWinPosInfo&, ByVal hWnd&, ByVal hWndInsertAfter&, ByVal x&, ByVal y&, ByVal cx&, ByVal cy&, ByVal wFlags&) ' 複数のウィンドウの位置とサイズを更新する Declare Function Api_EndDeferWindowPos& Lib "user32" Alias "EndDeferWindowPos" (ByVal hWinPosInfo&) Var Shared Mainform As Object Mainform.Attach GethWnd '================================================================ '= '================================================================ Declare Sub Mainform_Start edecl () Sub Mainform_Start() Var R As RECT Var hDWP As Long R.Left = 40 R.Top = 50 R.RIGHT = 280 R.Bottom = 190 Ret = Api_AdjustWindowRect(R, WS_THICKFRAME Or WS_CAPTION, False) hDWP = Api_BeginDeferWindowPos(1) Ret = Api_DeferWindowPos(hDWP, GethWnd, HWND_TOP, R.Left, R.Top, R.Right - R.Left, R.Bottom - R.Top, SWP_SHOWWINDOW) Ret = Api_EndDeferWindowPos(hDWP) Mainform.ShowWindow -1 For x = 0 To 240 step 10 line(x, 0)-(x, 140),,1 Next For y = 0 To 140 step 10 line(0, y)-(240, y),,1 Next End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End