Ver.2
ウインドウスタイルの設定について
HSPデフォルトの画面操作関数だと、システムモーダルなダイアログは表示できません。
そこで、user32.dll をコールして、ウィンドウスタイルを変える共通関数を作ってみました。
適当なフォルダに次のファイルを用意し、HSPでcommon_test2.hspを実行してみて下さい。
テスト方法
- メイン画面で[OPEN]ボタンをクリックすると、サブ画面が表示されます。
- サブ画面はタイトルバーのみで、システムメニュー、最小化ボタン、最大化ボタン、閉じるボタンはありません。
- サブ画面が表示されている間は、メイン画面の操作は行えません。
- サブ画面で[CLOSE]ボタンをクリックすると、サブ画面が閉じます。(非表示になります)。
- メイン画面の閉じるボタンをクリックすれば終わります。
この共通関数が出来たことで、マップチップエディタや、マップエディタのオプション設定ダイアログが実装出来そうです。
このスクリプトは、今後も改版していく可能性があります。
common.hsp
; ; モジュール定義:共通モジュール ; ; 作成 :ふじぽん ; ; モジュール名 :common ; ; モジュール変数:なし ; ; Copyright :http://d.hatena.ne.jp/fujiponXP ; ; 変更履歴 ; ver.1.0 2009/11/04 新規作成 ; ver.1.1 2009/12/07 ウィンドウスタイル関連追加 ; #module common ; ライセンス表示 #deffunc about_lisence sx=16*31: sy=16*15 bgscr 0, sx, sy,4+16,(ginfo_dispx-sx)/2,(ginfo_dispy-sy)/2 color 250,250,100 : boxf pos 16*2,16*2 font "",14,1+16 color 100,100,100 mes "本プログラムで使用されている素材は、" mes "次のホームページで公開されているライセンスに従い、ご利用下さい。" mes "" mes " ドット絵 :DENZI部屋" mes " http://www3.wind.ne.jp/DENZI/diary/" mes "" mes " 音楽素材 :SAM Free Music" mes " http://sam-free.com/" mes "" mes " スクリプト:作ってみる" mes " http://d.hatena.ne.jp/fujiponXP/" wait 500 return ; ウィンドウスタイル関連 #uselib "user32.dll" #define GWL_STYLE -16 #define global WS_MAXIMIZEBOX $00010000 ; 最小化ボタン(WS_SYSMENU と合わせて指定する必要あり) #define global WS_MINIMIZEBOX $00020000 ; 最大化ボタン(WS_SYSMENU と合わせて指定する必要あり) #define global WS_SYSMENU $00080000 ; システムメニューボックス #define global WS_DISABLED $08000000 ; 無効 (使用不能) #cfunc GetWindowLong "GetWindowLongA" int,int ; hWnd, nIndex #func SetWindowLong "SetWindowLongA" int,int,int ; hWnd, nIndex, dwNewLong ; ウィンドウスタイルセット #deffunc ws_set int p lwsStyle = GetWindowLong(hwnd, GWL_STYLE) lwsStyle = lwsStyle or p SetWindowLong hwnd, GWL_STYLE, lwsStyle return ; ウィンドウスタイルリセット #deffunc ws_reset int p lwsStyle = GetWindowLong(hwnd, GWL_STYLE) lwsStyle = lwsStyle and ($FFFFFFFF xor p) SetWindowLong hwnd, GWL_STYLE, lwsStyle return #global
common_test2.hsp
#include "common.hsp" about_lisence ; メイン screen 0, 9*32, 9*32 title "メイン" button gosub "OPEN", *lb_open ; サブ screen 1, 5*32, 5*32, 2+screen_fixedsize ws_reset WS_SYSMENU title "サブ" button gosub "CLOSE", *lb_close stop ; メイン操作不可、ダイアログ表示 *lb_open gsel 0: ws_set WS_DISABLED gsel 1, 1 return ; メイン操作不可解除、ダイアログ非表示 *lb_close gsel 0: ws_reset WS_DISABLED gsel 1, -1 return