【HSP】フルスクリーン/ウィンドウ切り替え【モジュール】

【HSP】フルスクリーン/ウィンドウ切り替え【モジュール】

以前作ったやつを、ちゃんと実用で使えるようにモジュール化したものです。

//// フルスクリーン/ウィンドウ切り替えモジュール
#include "user32.as"
#module "full_win_change"
// ウィンドウの座標保存
#deffunc fw_pos_save
fw_win_pos=ginfo(4),ginfo(5)
return
// 基本的な作成 (実際は使用しない命令)
#deffunc fw_window int _id,int _pos_x,int _pos_y,int _size_x,int _size_y
screen _id,ginfo(20),ginfo(21),screen_fixedsize|screen_hide,_pos_x,_pos_y,_size_x,_size_y
fw_pos_save
return
// フルスクにしてから表示
#deffunc fw_bgscr int _id
fw_window _id,0,0,ginfo(20),ginfo(21)
fw_change _id,1,0,0
gsel _id,2
return
// ウィンドウにしてから表示
#deffunc fw_screen int _id,int _pos_x,int _pos_y,int _size_x,int _size_y
fw_window _id,_pos_x,_pos_y,_size_x,_size_y
gsel _id,1
return
// 変更
#deffunc fw_change int _id,int _mode,int _size_x,int _size_y
gsel _id,0
if _mode=1 {
SetWindowLong hwnd,-16,$80000000|$10000000 // フルスクリーンにする
SetWindowPos hwnd,0,0,0,ginfo(20),ginfo(21),$4 // ウィンドウ枠のサイズ考えずにサイズ変更
gsel _id,2
} else {
SetWindowLong hwnd,-16,$16CA0000 // ウィンドウ (HSP標準) にする
width _size_x,_size_y,fw_win_pos(0),fw_win_pos(1) // ウィンドウ枠のサイズを考えてサイズ変更
gsel _id,1
}
return
#global

//// サンプル
#packopt hide 1 ; 実行ファイル作成時用
gsel 0,-1 ; 普通に実行時用

oncmd gosub *pos_save,0x3 ; ウィンドウの座標を保存する (ウィンドウ移動検出)
dim type,1
dim info,4,4
info(0,0)=0,1,0,0
info(0,1)=0,0,640,480
info(0,2)=0,0,960,720
info(0,3)=0,0,1280,960
dialog "フルスクリーンにしますか?",2,"画面モード選択"
if stat=6 : fw_bgscr 0 : type=0 : else : fw_screen 0,-1,-1,640,480 : type=1
mes "[TAB]キーでフルスクリーン (1通り) /ウィンドウ (3通り) の切り替え"
*main
stick key
if key&1024 {
type++ : type&0b11
fw_change info(0,type),info(1,type),info(2,type),info(3,type)
}
await 50
goto *main

*pos_save
if type!0 : fw_pos_save
return

※複数のウィンドウ作成するとバグります。fw_screen かfw_bgscr はどちらかを一回のみ使用してください。

・fw_screen 命令 … ウィンドウの作成 (このモジュール専用。普通にscreenするとバグる)
fw_screen p1,p2,p3,p4,p5
p1=0~ : ウィンドウID
p2=0~ : ウィンドウの配置X
p3=0~ : ウィンドウの配置Y
p4=0~ : ウィンドウのサイズX
p5=0~ : ウィンドウのサイズY

・fw_bgscr 命令 … 全画面表示ウィンドウの作成 (このモジュール専用。普通に bgscrするとバグる)
fw_bgscr p1
p1=0~ : ウィンドウID

・fw_change 命令 … フルスクリーン/ウィンドウ切り替え
fw_change p1,p2,p3,p4
p1=0~ : ウィンドウID
p2=0~1 : 切り替えるモード (0=ウィンドウ/1=フルスクリーン)
p3=0~ : ウィンドウのサイズX (ウィンドウの時のみ有効)
p4=0~ : ウィンドウのサイズY (ウィンドウの時のみ有効)

・fw_pos_save 命令 … ウィンドウの座標保存 (次回フルスク/ウィン切り替え時に適応される)
引数なし

あ、あと、前回のだとウィンドウ位置がフルスクリーンからウィンドウに戻した時に強制的に左上になってしまってたんで、それ修正しました。
ウィンドウ作成時およびウィンドウの移動時 (フルスクリーンに変更したときもこの場合に含まれちゃうらしく、この場合は除くよう) に、ウィンドウの位置を保存して、サイズ変更時にキープするようにしました。
東方はサイズがこの4択なんですよね~。
あと、東方は、「毎回聞く」の設定があるんですよね。
HSPでやるとしたら、終了時に保存、開始時に読み込み、で、メインのと別のウィンドウ作成して、ラジオボタンとチェックボックスで東方 (地霊殿以降) で初起動時に出る画面再現できますね。
(HSPでのラジオボタンの作成方法はググれば出ます)
では今回はこれぐらいで。
ではまた。
↓クリックしてね~