赞 | 170 |
VIP | 6 |
好人卡 | 208 |
积分 | 230 |
经验 | 137153 |
最后登录 | 2024-11-16 |
在线时间 | 8638 小时 |
Lv5.捕梦者
- 梦石
- 0
- 星屑
- 22958
- 在线时间
- 8638 小时
- 注册时间
- 2011-12-31
- 帖子
- 3367
|
按F5改画面
也可在事件脚本用
WLIB::SetGameWindowSize(width, height)調用- #******************************************************************************
- #
- # * エセフルスクリーン
- #
- # --------------------------------------------------------------------------
- # バージョン : 1.0.1
- # 対 応 : RPGツクールVX : RGSS2
- # 制 作 者 : CACAO
- # 配 布 元 : http://cacaosoft.web.fc2.com/
- # --------------------------------------------------------------------------
- # == 概 要 ==
- #
- # : ウィンドウのサイズを変更する機能を追加します。
- #
- # --------------------------------------------------------------------------
- # == 使用方法 ==
- #
- # ★ WLIB::SetGameWindowSize(width, height)
- # ウィンドウを中央に移動し、指定されたサイズに変更します。
- # 引数が負数、もしくはデスクトップより大きい場合はフルサイズで表示されます。
- # 処理が失敗すると false を返します。
- #
- #
- #******************************************************************************
- #==============================================================================
- # ◆ ユーザー設定
- #==============================================================================
- module WND_SIZE
- #--------------------------------------------------------------------------
- # ◇ サイズ変更キー
- #--------------------------------------------------------------------------
- # nil .. サイズ変更を行わない
- #--------------------------------------------------------------------------
- INPUT_KEY = :F5
- #--------------------------------------------------------------------------
- # ◇ サイズリスト
- #--------------------------------------------------------------------------
- # [ [横幅, 縦幅], ... ] のような二次元配列で設定します。
- # 幅を 0 にするとデスクトップサイズになります。
- #--------------------------------------------------------------------------
- SIZE_LIST = [ [544,416], [640,480], [800,600], [1088,832], [0,0] ]
- #--------------------------------------------------------------------------
- # ◇ セーブファイル
- #--------------------------------------------------------------------------
- # ウィンドウサイズの状況を保存するファイル名を設定します。
- # nil にすると、サイズを保存しません。
- #--------------------------------------------------------------------------
- FILE_SAVE = "System/test"
- end
- #/////////////////////////////////////////////////////////////////////////////#
- # #
- # 下記のスクリプトを変更する必要はありません。 #
- # #
- #/////////////////////////////////////////////////////////////////////////////#
- module WLIB
- #--------------------------------------------------------------------------
- # ● 定数
- #--------------------------------------------------------------------------
- # SystemMetrics
- SM_CYCAPTION = 0x04 # タイトルバーの高さ
- SM_CXDLGFRAME = 0x07 # 枠の幅
- SM_CYDLGFRAME = 0x08 # 枠の高さ
- # SetWindowPos
- SWP_NOSIZE = 0x01 # サイズ変更なし
- SWP_NOMOVE = 0x02 # 位置変更なし
- SWP_NOZORDER = 0x04 # 並び変更なし
- #--------------------------------------------------------------------------
- # ● Win32API
- #--------------------------------------------------------------------------
- @@FindWindow =
- Win32API.new('user32', 'FindWindow', 'pp', 'l')
- @@GetDesktopWindow =
- Win32API.new('user32', 'GetDesktopWindow', 'v', 'l')
- @@SetWindowPos =
- Win32API.new('user32', 'SetWindowPos', 'lliiiii', 'i')
- @@GetClientRect =
- Win32API.new('user32', 'GetClientRect', 'lp', 'i')
- @@GetWindowRect =
- Win32API.new('user32', 'GetWindowRect', 'lp', 'i')
- @@GetWindowLong =
- Win32API.new('user32', 'GetWindowLong', 'li', 'l')
- @@GetSystemMetrics =
- Win32API.new('user32', 'GetSystemMetrics', 'i', 'i')
- @@SystemParametersInfo =
- Win32API.new('user32', 'SystemParametersInfo', 'iipi', 'i')
- #--------------------------------------------------------------------------
- # ● ウィンドウの情報
- #--------------------------------------------------------------------------
- GAME_TITLE = load_data("Data/System.rvdata2").game_title.encode('SHIFT_JIS')
- GAME_HANDLE = @@FindWindow.call("RGSS Player", GAME_TITLE)
- # GAME_HANDLE = Win32API.new('user32', 'GetForegroundWindow', 'v', 'l').call
- GAME_STYLE = @@GetWindowLong.call(GAME_HANDLE, -16)
- GAME_EXSTYLE = @@GetWindowLong.call(GAME_HANDLE, -20)
- HDSK = @@GetDesktopWindow.call
- module_function
- #--------------------------------------------------------------------------
- # ● GetWindowRect
- #--------------------------------------------------------------------------
- def GetWindowRect(hwnd)
- r = [0,0,0,0].pack('l4')
- if @@GetWindowRect.call(hwnd, r) != 0
- result = Rect.new(*r.unpack('l4'))
- result.width -= result.x
- result.height -= result.y
- else
- result = nil
- end
- return result
- end
- #--------------------------------------------------------------------------
- # ● GetClientRect
- #--------------------------------------------------------------------------
- def GetClientRect(hwnd)
- r = [0,0,0,0].pack('l4')
- if @@GetClientRect.call(hwnd, r) != 0
- result = Rect.new(*r.unpack('l4'))
- else
- result = nil
- end
- return result
- end
- #--------------------------------------------------------------------------
- # ● GetSystemMetrics
- #--------------------------------------------------------------------------
- def GetSystemMetrics(index)
- @@GetSystemMetrics.call(index)
- end
- #--------------------------------------------------------------------------
- # ● SetWindowPos
- #--------------------------------------------------------------------------
- def SetWindowPos(hwnd, x, y, width, height, z, flag)
- @@SetWindowPos.call(hwnd, z, x, y, width, height, flag) != 0
- end
- #--------------------------------------------------------------------------
- # ● ウィンドウのサイズを取得
- #--------------------------------------------------------------------------
- def GetGameWindowRect
- GetWindowRect(GAME_HANDLE)
- end
- #--------------------------------------------------------------------------
- # ● ウィンドウのクライアントサイズを取得
- #--------------------------------------------------------------------------
- def GetGameClientRect
- GetClientRect(GAME_HANDLE)
- end
- #--------------------------------------------------------------------------
- # ● デスクトップのサイズを取得
- #--------------------------------------------------------------------------
- def GetDesktopRect
- r = [0,0,0,0].pack('l4')
- if @@SystemParametersInfo.call(0x30, 0, r, 0) != 0
- result = Rect.new(*r.unpack('l4'))
- result.width -= result.x
- result.height -= result.y
- else
- result = nil
- end
- return result
- end
- #--------------------------------------------------------------------------
- # ● ウィンドウのフレームサイズを取得
- #--------------------------------------------------------------------------
- def GetFrameSize
- return [
- GetSystemMetrics(SM_CYCAPTION), # タイトルバー
- GetSystemMetrics(SM_CXDLGFRAME), # 左右フレーム
- GetSystemMetrics(SM_CYDLGFRAME) # 上下フレーム
- ]
- end
- #--------------------------------------------------------------------------
- # ● ウィンドウの位置を変更
- #--------------------------------------------------------------------------
- def MoveGameWindow(x, y)
- SetWindowPos(GAME_HANDLE, x, y, 0, 0, 0, SWP_NOSIZE|SWP_NOZORDER)
- end
- #--------------------------------------------------------------------------
- # ● ウィンドウの位置を中央へ
- #--------------------------------------------------------------------------
- def MoveGameWindowCenter
- dr = GetDesktopRect()
- wr = GetGameWindowRect()
- x = (dr.width - wr.width) / 2
- y = (dr.height - wr.height) / 2
- SetWindowPos(GAME_HANDLE, x, y, 0, 0, 0, SWP_NOSIZE|SWP_NOZORDER)
- end
- #--------------------------------------------------------------------------
- # ● ウィンドウのサイズを変更
- #--------------------------------------------------------------------------
- def SetGameWindowSize(width, height)
- # 各領域の取得
- dr = GetDesktopRect() # Rect デスクトップ
- wr = GetGameWindowRect() # Rect ウィンドウ
- cr = GetGameClientRect() # Rect クライアント
- return false unless dr && wr && cr
- # フレームサイズの取得
- frame = GetFrameSize()
- ft = frame[0] + frame[2] # タイトルバーの縦幅
- fl = frame[1] # 左フレームの横幅
- fs = frame[1] * 2 # 左右フレームの横幅
- fb = frame[2] # 下フレームの縦幅
- if width <= 0 || height <= 0 || width >= dr.width || height >= dr.height
- w = dr.width + fs
- h = dr.height + ft + fb
- SetWindowPos(GAME_HANDLE, -fl, -ft, w, h, 0, SWP_NOZORDER)
- else
- w = width + fs
- h = height + ft + fb
- SetWindowPos(GAME_HANDLE, 0, 0, w, h, 0, SWP_NOMOVE|SWP_NOZORDER)
- MoveGameWindowCenter()
- end
- end
- end
- class Scene_Base
- #--------------------------------------------------------------------------
- # ●
- #--------------------------------------------------------------------------
- @@screen_mode = 0
- #--------------------------------------------------------------------------
- # ●
- #--------------------------------------------------------------------------
- def self.screen_mode=(index)
- @@screen_mode = index % WND_SIZE::SIZE_LIST.size
- end
- #--------------------------------------------------------------------------
- # ●
- #--------------------------------------------------------------------------
- def self.screen_mode
- @@screen_mode
- end
- #--------------------------------------------------------------------------
- # ○ フレーム更新
- #--------------------------------------------------------------------------
- alias _cao_update_wndsize update
- def update
- _cao_update_wndsize
- if Input.trigger?(WND_SIZE::INPUT_KEY) && WLIB::GAME_HANDLE != 0
- Scene_Base.screen_mode += 1
- if WLIB::SetGameWindowSize(*WND_SIZE::SIZE_LIST[@@screen_mode])
- if WND_SIZE::FILE_SAVE
- save_data(Scene_Base.screen_mode, WND_SIZE::FILE_SAVE)
- end
- else
- Sound.play_buzzer
- end
- end
- end
- end
- module WND_SIZE
- #--------------------------------------------------------------------------
- # ● 大きいサイズを除去
- #--------------------------------------------------------------------------
- def self.remove_large_window
- dr = WLIB::GetDesktopRect()
- WND_SIZE::SIZE_LIST.reject! do |wsz|
- wsz.size != 2 || dr.width < wsz[0] || dr.height < wsz[1]
- end
- if WND_SIZE::SIZE_LIST.empty?
- WND_SIZE::SIZE_LIST << [Graphics.width, Graphics.height]
- end
- end
- #--------------------------------------------------------------------------
- # ● 初期サイズの設定
- #--------------------------------------------------------------------------
- def self.init_window_size
- if WND_SIZE::FILE_SAVE && File.file?(WND_SIZE::FILE_SAVE)
- Scene_Base.screen_mode = load_data(WND_SIZE::FILE_SAVE)
- WLIB::SetGameWindowSize(*WND_SIZE::SIZE_LIST[Scene_Base.screen_mode])
- end
- end
- end
- WND_SIZE.remove_large_window
- WND_SIZE.init_window_size
复制代码 |
评分
-
查看全部评分
|