MoveWindowは、移動やリサイズができます。
これは、buttonやinputにも使用できます。
*doRedrawというサブルーチンを用意して、
その中で、ボタンの位置や、色々なオブジェクトの大きさを
計算してあげて、移動・リサイズさせればできます。
#include "user32.as"
#define GWL_STYLE -16
#define WM_SIZE 0x00000005
#define WS_MAXIMIZEBOX 0x00010000
#define WS_THICKFRAME 0x00040000
#define FALSE 0
#define TRUE 1
// 作成するウィンドウの大きさ
#define SCREEN_WIDTH 640
#define SCREEN_HEIGHT 480
// 作成したオブジェクトのハンドルを取得
#define OBJECT_HANDLE objinfo(stat, 2)
// とりあえず画面の大きさのウィンドウを作成して、目的の大きさへ変更する
screen 0, ginfo_dispx, ginfo_dispy
width SCREEN_WIDTH, SCREEN_HEIGHT
// 現在のウィンドウに、サイズ変更境界と、最大化ボタンをつける
GetWindowLong hwnd, GWL_STYLE
SetWindowLong hwnd, GWL_STYLE, stat | WS_THICKFRAME | WS_MAXIMIZEBOX
// ボタンやらを設置する
button gosub "test1", *dummy
handle_button1 = OBJECT_HANDLE
button gosub "test2", *dummy
handle_button2 = OBJECT_HANDLE
x = "test3":input x
handle_input1 = OBJECT_HANDLE
// サイズを変えた時
oncmd gosub *onResize, WM_SIZE
// ボタンなどの位置や大きさを調節する
gosub *doRedraw
stop
*dummy
return
// ウィンドウの大きさが変わったら
*onResize
// 全体を再描写
gosub *doRedraw
return
*doRedraw
// ボタン1の位置と大きさを設定する
hb1_x = 0
hb1_y = 0
hb1_width = ginfo_winx / 2 // 画面の半分の横幅
hb1_height = 20 // 高さは20
// ボタン2の位置と大きさを設定する
hb2_x = hb1_width // ボタン1の右側に配置
hb2_y = 0
hb2_width = ginfo_winx / 2 // 画面の半分の横幅
hb2_height = 20 // 高さは20
// インプットボックス1の位置と大きさを設定する
hi1_x = 0
hi1_y = hb1_y + hb1_height // ボタン1の下側に配置
hi1_width = ginfo_winx // 画面の全体の横幅
hi1_height = 20 // 高さは20
// ここで実際に移動・リサイズする
// MoveWindow
// p1 対象のハンドル
// p2 x座標
// p3 y座標
// p4 横幅
// p5 縦幅
// p6 再描写 TRUE(あり)/FALSE(なし) 今回は、再描写しないと乱れる場合はTRUE
MoveWindow handle_button1, hb1_x, hb1_y, hb1_width, hb1_height, TRUE
MoveWindow handle_button2, hb2_x, hb2_y, hb2_width, hb2_height, TRUE
MoveWindow handle_input1, hi1_x, hi1_y, hi1_width, hi1_height, TRUE
return