|
|
2019/10/27(Sun) 20:10:12|NO.88715
こんにちは。
現在ゲームアプリを作成しているのですが、全画面表示を行いたいと思っています。
そのため、ウィンドウ右上の「最大化」ボタンを使用できるようにしたいのですが、
通常の状態では使用することができなくなっていました。
このボタンを使えるようにして、ウィンドウの最大化を行えるようにするには、
どのようなスクリプトを組めばよいのでしょうか?
(なお、ウィンドウ上に読み込んだ写真などは、最大化した時の画面サイズに合わせて
拡大したいです)
回答よろしくお願いします。
|
|
2019/10/27(Sun) 20:47:05|NO.88716
最大化と全画面は別のものです。
全画面はモニター全体に広げることです。
最大化とは違い、タイトルバーやタスクバーも消えます。
ただ単に全画面表示したいのであれば、このようにすればいいかと。
bgscr 0,ginfo(20),ginfo(21),,0,0
|
|
2019/10/27(Sun) 23:41:08|NO.88721
一応、最大化のスクリプトも載せておきます。
#uselib "user32.dll"
#func GetWindowLong "GetWindowLongA" int,int
#func SetWindowLong "SetWindowLongA" int,int,int
#packopt hide 1
screen 0,ginfo(20),ginfo(21),2,,,640,480
GetWindowLong hwnd,-16
SetWindowLong hwnd,-16,stat|$10000|$40000
gsel 0,1
|
|
2019/10/29(Tue) 19:02:49|NO.88745
こんな感じでどうでしょうか。
ウィンドウスタイルにWS_MAXIMIZEBOXとWS_SIZEBOXを追加することでサイズ変更可能にしています。
あと、HSP標準のwidthは正確にサイズ変更ができないようなので、新たにwidth2という命令を作っています。
#include "user32.as"
#packopt hide 1
#const def_w 640 //ウィンドウの初期横幅
#const def_h 480 //ウィンドウの初期縦幅
#const min_w 320 //ウィンドウの最小横幅
#const min_h 240 //ウィンドウの最小縦幅
#module
//HSP標準のwidthは正確にウィンドウサイズの変更ができない模様。
//(古いWindowsを基準にしていて、Windows10の仕様に対応していない?)
//正確にサイズを変更できるwidth2命令を自作。
#define global width2(%1=-1,%2=-1,%3=0x80000000,%4=0x80000000,%5=0) _width2 %1,%2,%3,%4,%5
#deffunc _width2 int _w,int _h,int _x,int _y,int use_menu
opt=0x4 //SWP_NOZORDER
if _w<0 : w=ginfo_winx : else : w=_w
if _h<0 : h=ginfo_winy : else : h=_h
if (w=ginfo_winx)&(h=ginfo_winy) : opt|=0x1 //SWP_NOSIZEを追加
if _x=0x80000000 : x=ginfo_wx1 : else : x=_x
if _y=0x80000000 : y=ginfo_wy1 : else : y=_y
if (x=ginfo_wx1)&(y=ginfo_wy1) : opt|=0x2 //SWP_NOMOVEを追加
if opt=0x7 : return
dim rect,4 : rect=0,0,w,h
GetWindowLong hwnd,-16 //ウィンドウスタイルを取得
st=stat
GetWindowLong hwnd,-20 //拡張ウィンドウスタイルを取得
est=stat
AdjustWindowRectEx varptr(rect),st,use_menu!=0,est //ウィンドウサイズの補正を行う
w=rect(2)-rect(0) : h=rect(3)-rect(1)
SetWindowPos hwnd,0,x,y,w,h,opt //ウィンドウの位置とサイズを変更
return
#global
screen 0,ginfo_dispx,ginfo_dispy,2 //最大化できるように画面いっぱいの幅でウィンドウを初期化
GetWindowLong hwnd,-16
SetWindowLong hwnd,-16,stat | 0x00010000 | 0x00040000 //ウィンドウスタイルにWS_MAXIMIZEBOXとWS_SIZEBOXを追加
//参考:http://chokuto.ifdef.jp/urawaza/prm/window_style.html
width2 def_w,def_h
gsel 0,1
oncmd gosub *resize,0x5 //WM_SIZE。ウィンドウサイズ変更時にここにジャンプする。
//参考:http://chokuto.ifdef.jp/urawaza/message/WM_SIZE.html
gosub *view_size
stop
*resize
if (wParam=0)|(wParam=2) {
//ウィンドウのサイズが変わった時。
//ウィンドウの横幅か縦幅が最小値未満になった場合、強制的に最小値にリサイズ。
//(もっと良い方法がありそうな気もするが、見つからなかったのでこの方法で)
adj_w=ginfo_winx : adj_h=ginfo_winy
if adj_w<min_w : adj_w=min_w
if adj_h<min_h : adj_h=min_h
if (adj_w!=ginfo_winx)|(adj_h!=ginfo_winy) {
oncmd 0
width2 adj_w,adj_h
oncmd 1
}
//
//以下、ウィンドウのサイズが変わった時の処理を書く
//
gosub *view_size
}
return 0
*view_size
//ウィンドウの縦幅と横幅を表示
color 255,255,255 : boxf
color 0,0,0 : pos 0,0
mes "ウィンドウのサイズ:"+str(ginfo_winx)+"×"+str(ginfo_winy)
return
| |
|
2019/10/29(Tue) 19:30:01|NO.88746
すみません、修正です。
ウィンドウメッセージのWM_GETMINMAXINFOを捕まえれば
最小サイズ未満にならないよう抑制できました。
#include "user32.as"
#packopt hide 1
#const def_w 640 //ウィンドウの初期横幅
#const def_h 480 //ウィンドウの初期縦幅
#const min_w 320 //ウィンドウの最小横幅
#const min_h 240 //ウィンドウの最小縦幅
#module
//HSP標準のwidthは正確にウィンドウサイズの変更ができない模様。
//(古いWindowsを基準にしていて、Windows10の仕様に対応していない?)
//正確にサイズを変更できるwidth2命令を自作。
#define global window_size(%1,%2,%3=0) _window_size %1,%2,%3
#deffunc _window_size var ws_w,var ws_h,int ws_m
//ウィンドウのクライアントサイズから、枠なども含めたウィンドウ全体のサイズに変換する
dim rect,4 : rect=0,0,ws_w,ws_h
GetWindowLong hwnd,-16 //ウィンドウスタイルを取得
st=stat
GetWindowLong hwnd,-20 //拡張ウィンドウスタイルを取得
est=stat
AdjustWindowRectEx varptr(rect),st,ws_m!=0,est //変換
ws_w=rect(2)-rect(0) : ws_h=rect(3)-rect(1)
return
#define global width2(%1=-1,%2=-1,%3=0x80000000,%4=0x80000000,%5=0) _width2 %1,%2,%3,%4,%5
#deffunc _width2 int _w,int _h,int _x,int _y,int use_menu
opt=0x4 //SWP_NOZORDER
if _w<0 : w=ginfo_winx : else : w=_w
if _h<0 : h=ginfo_winy : else : h=_h
if (w=ginfo_winx)&(h=ginfo_winy) : opt|=0x1 //SWP_NOSIZEを追加
if _x=0x80000000 : x=ginfo_wx1 : else : x=_x
if _y=0x80000000 : y=ginfo_wy1 : else : y=_y
if (x=ginfo_wx1)&(y=ginfo_wy1) : opt|=0x2 //SWP_NOMOVEを追加
if opt=0x7 : return
window_size w,h,use_menu
SetWindowPos hwnd,0,x,y,w,h,opt //ウィンドウの位置とサイズを変更
return
#global
screen 0,ginfo_dispx,ginfo_dispy,2 //最大化できるように画面いっぱいの幅でウィンドウを初期化
GetWindowLong hwnd,-16
SetWindowLong hwnd,-16,stat | 0x00010000 | 0x00040000 //ウィンドウスタイルにWS_MAXIMIZEBOXとWS_SIZEBOXを追加
//参考:http://chokuto.ifdef.jp/urawaza/prm/window_style.html
//min_wとmin_hを補正
min_w2=min_w : min_h2=min_h
window_size min_w2,min_h2
width2 def_w,def_h
gsel 0,1
oncmd gosub *minmax,0x24 //WM_GETMINMAXINFO
oncmd gosub *resize,0x5 //WM_SIZE。ウィンドウサイズ変更時にここにジャンプする。
//参考:http://chokuto.ifdef.jp/urawaza/message/WM_SIZE.html
gosub *view_size
stop
*minmax
dupptr minmaxinfo,lParam,40,4
minmaxinfo(6)=min_w2 : minmaxinfo(7)=min_h2
return 0
*resize
if (wParam=0)|(wParam=2) {
//
//ウィンドウのサイズが変わった時の処理をここに書く
//
gosub *view_size
}
return 0
*move
dialog
return 0
*view_size
//ウィンドウの縦幅と横幅を表示
color 255,255,255 : boxf
color 0,0,0 : pos 0,0
mes "ウィンドウのサイズ:"+str(ginfo_winx)+"×"+str(ginfo_winy)
return
| |
|
2019/10/31(Thu) 21:00:45|NO.88777
みなさん、ありがとうございました!
無事解決しました。
|
|