Ver.2

ウインドウスタイルの設定について


HSPデフォルトの画面操作関数だと、システムモーダルなダイアログは表示できません。
そこで、user32.dll をコールして、ウィンドウスタイルを変える共通関数を作ってみました。


適当なフォルダに次のファイルを用意し、HSPでcommon_test2.hspを実行してみて下さい。

  • common.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