| 
					 
							
													 
							
						 
						
 
 | 
 | 
 
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 
みなさん、ありがとうございました! 
 
無事解決しました。 
 
 |   
  
					 |