〜 ウィンドウ 〜
クローズボックスを押しても終了させない

1つのHSPアプリケーションで複数のウィンドウを同時に起動させることができ、
HSP2だとID0以外は基本、何のボタンも付かないタイトルバーを持つウィンドウですが、
HSP3からはID0とほぼ同じタイトルバーに最小化・閉じるボタンの付いたウィンドウが表示されます。
いずれかのクローズボックス(タイトルバー右上の×ボタン)を押すと、対象のウィンドウはおろか、
そのアプリケーション全てのウィンドウが一斉に閉じられて終了してしまい、
そのような動作でも良い場合もあるでしょうが、複数のウィンドウを使用する場合は、
メインウィンドウから立ち上げたサブウィンドウ的な役割の場合が多々あり、
「使用を終えたサブウィンドウだけを閉じたい」のにメインもろとも閉じられるのは都合が悪いですよね。
こんな時に有効なのが、エディター系アプリの保存せずに終了しようとした際の処理にも使えるonexit命令。
終了されようとしたら予め指定しておいたラベルにジャンプさせることが出来るもので、
システム変数wparamに閉じようとしているウィンドウID番号が入るようになっています。
終了しようとジャンプしてきたら、プログラム側でウィンドウIDを調べ、
メインウィンドウならそのまま終了処理に、サブウィンドウならサブウィンドウだけを閉じるようにします。
尚、HSPでは標準命令でウィンドウを閉じる命令が用意されておらずgsel命令によりウィンドウを非表示にして、あくまで閉じたように見せることしか出来ません。
	
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
	repeat 3
		screen cnt
		title str(cnt)
	loop
	onexit gosub *close
	stop

*close
	// 閉じようとしているウィンドウがID0以外なら非表示にするだけ
	if wparam {
		gsel wparam, -1
		return
	}
	dialog "終了しますか?", 2
	if stat = 7 : return
	end