ウインドウの位置,大きさの変更

Win32APIを利用すると,ウィンドウの位置や大きさを好みに合わせて変更できる。

100 CALL GetWindowRect(WINHANDLE("MAIN"),left,top,right,bottom)
110 PRINT left,top,right,bottom
120 CALL GetWindowRect(WINHANDLE("TEXT"),leftT,topT,rightT,bottomT)
130 CALL SetWindowPos(WinHandle("TEXT"),0,right,top,rightT-LeftT,Bottom-Top,0)
140 END
150 EXTERNAL SUB GetWindowRect(handle,left,top,right,bottom)
160 OPTION CHARACTER byte
170 FUNCTION GetWindowRectOrg(hwnd,p$)
180    ASSIGN "user32.dll","GetWindowRect"
190 END FUNCTION
200 LET p$=REPEAT$(CHR$(0),16)
210 IF GetWindowRectOrg(Handle,p$)<>0 THEN
220    LET left=ORD(p$(1:1))+256*ORD(p$(2:2))
230    LET top=ORD(p$(5:5))+256*ORD(p$(6:6))
240    LET right=ORD(p$(9:9))+256*ORD(p$(10:10))
250    LET bottom=ORD(p$(13:13))+256*ORD(p$(14:14))
260 END IF
270 END SUB
280 EXTERNAL SUB SetWindowPos(hwnd,HwndInsAfter,x,y,cx,cy,nFlags)
290 ASSIGN "user32.dll","SetWindowPos"
300 END SUB

150行で定義された外部副プログラムGetWindowRectは,指定したウィンドウの四隅の座標を取得する。
280行の関数SetWindowPosは,nFlagsに0を指定したとき,指定されたウィンドウの左上端をx,yに移動し,幅をcxに,高さをcyに変更する。 HwndInsAfterは通常,0を指定する。
上のプログラムを実行すると,テキストウィンドウがメインウィンドウの右に密着して並ぶ。

SetWindowPosは,nFlagsに1を指定するとx,yのみが有効で幅,高さは保存され,nFlagsに2を指定するとcx,cyのみが有効で幅,高さのみが変わる。

ウインドウの表示・非表示

ウィンドウの表示状態の変更はShowWndで変更できる。

例 グラフィックスウィンドウとテキストウィンドウのアイコンの表示を消す

10 SUB ShowWnd(hWnd, nCmdShow)
20    ASSIGN "user32.dll","ShowWindow"
30 END SUB
40 CALL showWnd(winhandle("GRAPHICS"),0)
50 CALL showWnd(winhandle("TEXT"),0)
60 END

表示状態に戻すときは,第2引数に5を指定する。詳細はこちら

WINHANDLE関数

WINHANDLE関数の引数は,次のいずれか。
 "MAIN","TEXT","GRAPHICS","INPUT","CHARACTER INPUT","TRACE", "LOCATE", "TEXTWINDOW1", "TEXTWINDOW2" (各ウィンドウに対応)
"RICHEDIT", "RICHEDIT1", "RICHEDIT2"(それぞれ,テキストウインドウ,TextWindow1,TextWindow2のRichEditコントロール。)


戻る