HSP | ウィンドウのタイトルバーや枠を出したり消したりする
HSP | ウィンドウのタイトルバーや枠を出したり消したりする
NEW!! 2012/08/24 → 使いやすくなりました https://archive.kerupani129.net/blog/posts/【hsp】フルスクリーン-ウィンドウ切り替え【モジ/
ゲームを作成するとき、ウィンドウ/フルスクリーンの変更がしたいじゃないですか。
でも、HSPの標準命令だとscreen/bgscrでどっちかに初期化するしか方法がありません。
そこで、WinAPIを使って毎回初期化するというようなことは無しでやってみたいと思います。
今回はついでにウィンドウサイズも変えてみます。
#include "user32.as"
screen 0,ginfo(20),ginfo(21),,,,640,480 // 後でサイズを変更できるようにするため、初期化サイズはデスクトップのサイズ
flag=0
onkey *change
stop
*change
flag^1 // 0と1 切り替え
if flag=1 {
SetWindowLong hwnd,-16,$80000000|$10000000 // フルスクリーンにする
SetWindowPos hwnd,0,0,0,ginfo(20),ginfo(21),$4 // ウィンドウ枠のサイズ考えずにサイズ変更
} else {
SetWindowLong hwnd,-16,$16CA0000 // ウィンドウ (HSP標準) にする
width 640,480 // ウィンドウ枠のサイズを考えてサイズ変更
}
サイズの変更は、HSP標準命令のwidthとWinAPIのSetWindowPosで使い分けています。
なぜかというと、widthはクライアント領域のサイズを指定していると考えて変更してくれて、
SetWindowPosはウィンドウ枠の幅も含めて全体でサイズを指定するのですが、
ウィンドウ枠の幅の指定を変更していないためにフルスクリーン時にwidthで変更するとずれてしまうためです。
描画される範囲もおかしくなるため、フルスクリーン時にはwidthは使ってはダメです。
もちろん、ウィンドウ時に、ウィンドウ幅を考えないでSetWindowPosを使うと一回り小さいウィンドウになってしまいます。
本当はウィンドウの枠の幅を指定すればいいんでしょうけど…HSPでやる方法がわかりませんでした…。すいません…。ここまで調べるのだけでも結構大変でした…。WinAPIとか全っ然使っていないので…。ごめんなさい。
今回はここまでにしときます。では。
↓クリックするたび友達増えるね
おお、これは有用ですね^^! なんとお疲れ様です。
何気にginfo(20),ginfo(21)が美しく見えます^^ 私はginfo_dispx,ginfo_dispy使ってるので……
ありがとうございます!!
フェルミウム湾さんはマクロのほうを使っているのですか…。
コンパイル時に置き換えられるので結局違いはないですけど、やっぱりこっちの方がなんとなく好きなのでこっち使ってますww