HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2019
1027
haru「最大化」ボタンの使用5解決


haru

リンク

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



haru

リンク

2019/10/31(Thu) 21:00:45|NO.88777

みなさん、ありがとうございました!

無事解決しました。



ONION software Copyright 1997-2023(c) All rights reserved.