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

HSPの命令で作成したウィンドウは最小化・閉じるボタンが有効となっており処理することができますが、
必ずしも使えると便利な機能ではなく、時には最小化されたり閉じられると困る場合もあることでしょう。
閉じるボタンの制御についてはコチラで説明するとして、最小化ボタンについて説明します。
最小化ボタンを無効化するには、API関数のSetWindowLongでウィンドウスタイルを変更しましょう。
SetWindowLongは現在のスタイルに機能を付け加えるのではなく、
一からスタイルを設定する必要があるため、現在の機能はそのままに最大化機能の追加だけをしたいなら、
現在のスタイルを取得するAPI関数であるGetWindowLongを併せて使います。
SetWindowLongで変更できるスタイルは、下記の2タイプ存在します。
境界線の有無やスクロールバーの付加等の標準ウィンドウスタイル変更「GWL_STYLE(-16)」と、
MDIウィンドウの作成や投下ウィンドウの作成等の拡張ウィンドウスタイル「GWL_EXSTYLE(-20)」のうち
今回の最小化ボタン使用有無設定「WS_MINIMIZEBOX(=0x00020000)」は標準ウィンドウスタイルなので、
「新スタイル値 = GetWindowLongで取得した旧スタイル - WS_MINIMIZEBOX」で新スタイル値を求め、
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, 400, 300, 2
	winsetstyle , , 0x00020000 // WS_MINIMIZEBOXで最小化ボタンを除去
	gsel 0, 1
	stop

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

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#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, 400, 300, 2
	winsetstyle , , 0x00020000 // WS_MINIMIZEBOXで最小化ボタンを除去
	gsel 0, 1