位置構造体によるウィンドウの位置とサイズを更新         <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