〜 ウィンドウ 〜
最大化ボタンを有効化 (要USER32.DLL)

HSPの命令でウィンドウサイズをディスプレイサイズに変更できても、それは最大化とは呼びません。
別途、HSPの命令で最大化を行うことはできませんので、どうしても最大化処理を行いたい場合は、
API関数のSetWindowLongでウィンドウのスタイルを変更しなくてはなりません。
SetWindowLongは現在のスタイルに機能を付け加えるのではなく、
一からスタイルを設定する必要があるため、現在の機能はそのままに最大化機能の追加だけをしたいなら、
現在のスタイルを取得するAPI関数であるGetWindowLongを併せて使います。
SetWindowLongで変更できるスタイルは、下記の2タイプ存在します。
境界線の有無やスクロールバーの付加等の標準ウィンドウスタイル変更「GWL_STYLE(-16)」と、
MDIウィンドウの作成や投下ウィンドウの作成等の拡張ウィンドウスタイル「GWL_EXSTYLE(-20)」のうち
今回の最大化ボタン使用有無設定「WS_MAXIMIZEBOX(=0x00010000)」は標準ウィンドウスタイルなので、
「新スタイル値 = GetWindowLongで取得した旧スタイル + WS_MAXIMIZEBOX」で新スタイル値を求め、
SetWindowLongで設定するHSPウィンドウ(ハンドル)を指定し、
標準スタイル(GWL_STYLE)を新スタイルで更新するように処理すればOKです。
※別途API関数の定義をしておく必要があります。
尚、表示しているウィンドウの最大化ボタンを有効化しても灰色表示のままであるため、
下記のサンプルは最初非表示から始めて、最大化を有効化した後、表示させています。
最大化ボタンが使えるようになっても、最大化サイズは指定されたウィンドウサイズ以上にはなりません。
もし、最大化時にディスプレイ全体を覆う様にしたい場合は、ディスプレイサイズで作成しましょう。
	

wingetstyle 拡張スタイルフラグ
拡張スタイルフラグ現在の操作対象ウィンドウのうち、0又は省略すると標準ウィンドウスタイル、
それ以外を指定すると拡張ウィンドウスタイル値を取得する。
尚、取得結果はstatに代入する。

winsetstyle 拡張スタイルフラグ, 追加スタイル, 削除スタイル
拡張スタイルフラグ現在の操作対象ウィンドウのうち、0又は省略すると標準ウィンドウスタイル、
それ以外を指定すると拡張ウィンドウスタイル値を設定する。
追加スタイル現在のスタイルのほかに追加したいスタイル値を指定する。
削除スタイル現在のスタイルのうちで削除したいスタイル値を指定する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
	ll_libload user, "user32.dll"
	ll_getproc GetWindowLong, "GetWindowLongA", user
	ll_getproc SetWindowLong, "SetWindowLongA", user

#module
#deffunc wingetstyle int
	mref extflg, 0
	mref stt, 64
	mref bmscr, 67
	prm = bmscr.13, -4 * (extflg ! 0) - 16
	ll_callfunc prm, 2, GetWindowLong@
	ll_ret i : stt = i
	return

#deffunc winsetstyle int, int, int
	mref extflg, 0 : mref aprm, 1 : mref dprm, 2
	mref bmscr, 67
	wingetstyle
	prm = bmscr.13, -4 * (extflg ! 0) - 16, stat | aprm & (stat | aprm ^ dprm)
	ll_callfunc prm, 3, SetWindowLong@
	return
#global

	screen 0, dispx, dispy   // 表示サイズ(p7,p8)を指定するとそのサイズまでしか正常に表示されない
	winsetstyle , 0x00010000 // WS_MAXIMIZEBOX
	width 400, 300           // コレでも最大化ボタンは再描画される
	stop

取得スタイル = wingetstyle(拡張スタイルフラグ)
取得スタイル取得したスタイル値の受取先を指定する。
拡張スタイルフラグ現在の操作対象ウィンドウのうち、0又は省略すると標準ウィンドウスタイル、
それ以外を指定すると拡張ウィンドウスタイル値を取得する。

winsetstyle 拡張スタイルフラグ, 追加スタイル, 削除スタイル
拡張スタイルフラグ現在の操作対象ウィンドウのうち、0又は省略すると標準ウィンドウスタイル、
それ以外を指定すると拡張ウィンドウスタイル値を設定する。
追加スタイル現在のスタイルのほかに追加したいスタイル値を指定する。
削除スタイル現在のスタイルのうちで削除したいスタイル値を指定する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#uselib "user32.dll"
#cfunc global GetWindowLong "GetWindowLongA" int, int
#func  global SetWindowLong "SetWindowLongA" int, int, int

#module
#defcfunc wingetstyle int extflg
	return GetWindowLong( hwnd, -4 * (extflg ! 0) - 16 )

#deffunc winsetstyle int extflg, int aprm, int dprm
	SetWindowLong hwnd, -4 * (extflg ! 0) - 16, wingetstyle() | aprm & (wingetstyle() | aprm^ dprm)
	return
#global

	screen 0, ginfo_dispx, ginfo_dispy, 2, , , 400, 300
	winsetstyle , 0x00010000 // WS_MAXIMIZEBOX
	gsel 0, 1