设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 6616|回复: 6
打印 上一主题 下一主题

[已经解决] 关于窗口大小问题

[复制链接]

Lv4.逐梦者

梦石
10
星屑
60
在线时间
337 小时
注册时间
2014-4-4
帖子
163
跳转到指定楼层
1
发表于 2014-9-18 13:34:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
我想要加大窗口的大小(不改变分辨率的情况下可能吗?),
顺便想问一下,使用分辨率修改补丁变大之后,是不是素材的分辨率也会变大?如何加强素材的清晰度呢?

新作短十作品~《前夜祭-哀魔女之诗》
地址:https://rpg.blue/thread-383776-1-1.html

Lv5.捕梦者

梦石
0
星屑
22703
在线时间
8623 小时
注册时间
2011-12-31
帖子
3367
2
发表于 2014-9-18 15:03:21 | 只看该作者
按F5改画面
也可在事件脚本用
WLIB::SetGameWindowSize(width, height)調用
  1. #******************************************************************************
  2. #
  3. #    * エセフルスクリーン
  4. #
  5. #  --------------------------------------------------------------------------
  6. #    バージョン :  1.0.1
  7. #    対      応 :  RPGツクールVX : RGSS2
  8. #    制  作  者 :  CACAO
  9. #    配  布  元 :  http://cacaosoft.web.fc2.com/
  10. #  --------------------------------------------------------------------------
  11. #   == 概    要 ==
  12. #
  13. #   : ウィンドウのサイズを変更する機能を追加します。
  14. #
  15. #  --------------------------------------------------------------------------
  16. #   == 使用方法 ==
  17. #
  18. #    ★ WLIB::SetGameWindowSize(width, height)
  19. #     ウィンドウを中央に移動し、指定されたサイズに変更します。
  20. #     引数が負数、もしくはデスクトップより大きい場合はフルサイズで表示されます。
  21. #     処理が失敗すると false を返します。
  22. #
  23. #
  24. #******************************************************************************


  25. #==============================================================================
  26. # ◆ ユーザー設定
  27. #==============================================================================
  28. module WND_SIZE
  29.   #--------------------------------------------------------------------------
  30.   # ◇ サイズ変更キー
  31.   #--------------------------------------------------------------------------
  32.   #     nil .. サイズ変更を行わない
  33.   #--------------------------------------------------------------------------
  34.   INPUT_KEY = :F5
  35.   #--------------------------------------------------------------------------
  36.   # ◇ サイズリスト
  37.   #--------------------------------------------------------------------------
  38.   #     [ [横幅, 縦幅], ... ] のような二次元配列で設定します。
  39.   #     幅を 0 にするとデスクトップサイズになります。
  40.   #--------------------------------------------------------------------------
  41.   SIZE_LIST = [ [544,416], [640,480], [800,600], [1088,832], [0,0] ]
  42.   #--------------------------------------------------------------------------
  43.   # ◇ セーブファイル
  44.   #--------------------------------------------------------------------------
  45.   #   ウィンドウサイズの状況を保存するファイル名を設定します。
  46.   #   nil にすると、サイズを保存しません。
  47.   #--------------------------------------------------------------------------
  48.   FILE_SAVE = "System/test"
  49. end


  50. #/////////////////////////////////////////////////////////////////////////////#
  51. #                                                                             #
  52. #                下記のスクリプトを変更する必要はありません。                 #
  53. #                                                                             #
  54. #/////////////////////////////////////////////////////////////////////////////#


  55. module WLIB
  56.   #--------------------------------------------------------------------------
  57.   # ● 定数
  58.   #--------------------------------------------------------------------------
  59.   # SystemMetrics
  60.   SM_CYCAPTION  = 0x04                    # タイトルバーの高さ
  61.   SM_CXDLGFRAME = 0x07                    # 枠の幅
  62.   SM_CYDLGFRAME = 0x08                    # 枠の高さ
  63.   # SetWindowPos
  64.   SWP_NOSIZE     = 0x01                   # サイズ変更なし
  65.   SWP_NOMOVE     = 0x02                   # 位置変更なし
  66.   SWP_NOZORDER   = 0x04                   # 並び変更なし
  67.   #--------------------------------------------------------------------------
  68.   # ● Win32API
  69.   #--------------------------------------------------------------------------
  70.   @@FindWindow =
  71.     Win32API.new('user32', 'FindWindow', 'pp', 'l')
  72.   @@GetDesktopWindow =
  73.     Win32API.new('user32', 'GetDesktopWindow', 'v', 'l')
  74.   @@SetWindowPos =
  75.     Win32API.new('user32', 'SetWindowPos', 'lliiiii', 'i')
  76.   @@GetClientRect =
  77.     Win32API.new('user32', 'GetClientRect', 'lp', 'i')
  78.   @@GetWindowRect =
  79.     Win32API.new('user32', 'GetWindowRect', 'lp', 'i')
  80.   @@GetWindowLong =
  81.     Win32API.new('user32', 'GetWindowLong', 'li', 'l')
  82.   @@GetSystemMetrics =
  83.     Win32API.new('user32', 'GetSystemMetrics', 'i', 'i')
  84.   @@SystemParametersInfo =
  85.     Win32API.new('user32', 'SystemParametersInfo', 'iipi', 'i')
  86.   #--------------------------------------------------------------------------
  87.   # ● ウィンドウの情報
  88.   #--------------------------------------------------------------------------
  89.   GAME_TITLE  = load_data("Data/System.rvdata2").game_title.encode('SHIFT_JIS')
  90.   GAME_HANDLE = @@FindWindow.call("RGSS Player", GAME_TITLE)
  91.   # GAME_HANDLE = Win32API.new('user32', 'GetForegroundWindow', 'v', 'l').call
  92.   GAME_STYLE   = @@GetWindowLong.call(GAME_HANDLE, -16)
  93.   GAME_EXSTYLE = @@GetWindowLong.call(GAME_HANDLE, -20)
  94.   HDSK = @@GetDesktopWindow.call

  95. module_function
  96.   #--------------------------------------------------------------------------
  97.   # ● GetWindowRect
  98.   #--------------------------------------------------------------------------
  99.   def GetWindowRect(hwnd)
  100.     r = [0,0,0,0].pack('l4')
  101.     if @@GetWindowRect.call(hwnd, r) != 0
  102.       result = Rect.new(*r.unpack('l4'))
  103.       result.width -= result.x
  104.       result.height -= result.y
  105.     else
  106.       result = nil
  107.     end
  108.     return result
  109.   end
  110.   #--------------------------------------------------------------------------
  111.   # ● GetClientRect
  112.   #--------------------------------------------------------------------------
  113.   def GetClientRect(hwnd)
  114.     r = [0,0,0,0].pack('l4')
  115.     if @@GetClientRect.call(hwnd, r) != 0
  116.       result = Rect.new(*r.unpack('l4'))
  117.     else
  118.       result = nil
  119.     end
  120.     return result
  121.   end
  122.   #--------------------------------------------------------------------------
  123.   # ● GetSystemMetrics
  124.   #--------------------------------------------------------------------------
  125.   def GetSystemMetrics(index)
  126.     @@GetSystemMetrics.call(index)
  127.   end
  128.   #--------------------------------------------------------------------------
  129.   # ● SetWindowPos
  130.   #--------------------------------------------------------------------------
  131.   def SetWindowPos(hwnd, x, y, width, height, z, flag)
  132.     @@SetWindowPos.call(hwnd, z, x, y, width, height, flag) != 0
  133.   end

  134.   #--------------------------------------------------------------------------
  135.   # ● ウィンドウのサイズを取得
  136.   #--------------------------------------------------------------------------
  137.   def GetGameWindowRect
  138.     GetWindowRect(GAME_HANDLE)
  139.   end
  140.   #--------------------------------------------------------------------------
  141.   # ● ウィンドウのクライアントサイズを取得
  142.   #--------------------------------------------------------------------------
  143.   def GetGameClientRect
  144.     GetClientRect(GAME_HANDLE)
  145.   end
  146.   #--------------------------------------------------------------------------
  147.   # ● デスクトップのサイズを取得
  148.   #--------------------------------------------------------------------------
  149.   def GetDesktopRect
  150.     r = [0,0,0,0].pack('l4')
  151.     if @@SystemParametersInfo.call(0x30, 0, r, 0) != 0
  152.       result = Rect.new(*r.unpack('l4'))
  153.       result.width -= result.x
  154.       result.height -= result.y
  155.     else
  156.       result = nil
  157.     end
  158.     return result
  159.   end
  160.   #--------------------------------------------------------------------------
  161.   # ● ウィンドウのフレームサイズを取得
  162.   #--------------------------------------------------------------------------
  163.   def GetFrameSize
  164.     return [
  165.       GetSystemMetrics(SM_CYCAPTION),   # タイトルバー
  166.       GetSystemMetrics(SM_CXDLGFRAME),  # 左右フレーム
  167.       GetSystemMetrics(SM_CYDLGFRAME)   # 上下フレーム
  168.     ]
  169.   end
  170.   #--------------------------------------------------------------------------
  171.   # ● ウィンドウの位置を変更
  172.   #--------------------------------------------------------------------------
  173.   def MoveGameWindow(x, y)
  174.     SetWindowPos(GAME_HANDLE, x, y, 0, 0, 0, SWP_NOSIZE|SWP_NOZORDER)
  175.   end
  176.   #--------------------------------------------------------------------------
  177.   # ● ウィンドウの位置を中央へ
  178.   #--------------------------------------------------------------------------
  179.   def MoveGameWindowCenter
  180.     dr = GetDesktopRect()
  181.     wr = GetGameWindowRect()
  182.     x = (dr.width - wr.width) / 2
  183.     y = (dr.height - wr.height) / 2
  184.     SetWindowPos(GAME_HANDLE, x, y, 0, 0, 0, SWP_NOSIZE|SWP_NOZORDER)
  185.   end
  186.   #--------------------------------------------------------------------------
  187.   # ● ウィンドウのサイズを変更
  188.   #--------------------------------------------------------------------------
  189.   def SetGameWindowSize(width, height)
  190.     # 各領域の取得
  191.     dr = GetDesktopRect()         # Rect デスクトップ
  192.     wr = GetGameWindowRect()      # Rect ウィンドウ
  193.     cr = GetGameClientRect()      # Rect クライアント
  194.     return false unless dr && wr && cr
  195.     # フレームサイズの取得
  196.     frame = GetFrameSize()
  197.     ft = frame[0] + frame[2]      # タイトルバーの縦幅
  198.     fl = frame[1]                 # 左フレームの横幅
  199.     fs = frame[1] * 2             # 左右フレームの横幅
  200.     fb = frame[2]                 # 下フレームの縦幅
  201.     if width <= 0 || height <= 0 || width >= dr.width || height >= dr.height
  202.       w = dr.width + fs
  203.       h = dr.height + ft + fb
  204.       SetWindowPos(GAME_HANDLE, -fl, -ft, w, h, 0, SWP_NOZORDER)
  205.     else
  206.       w = width + fs
  207.       h = height + ft + fb
  208.       SetWindowPos(GAME_HANDLE, 0, 0, w, h, 0, SWP_NOMOVE|SWP_NOZORDER)
  209.       MoveGameWindowCenter()
  210.     end
  211.   end
  212. end

  213. class Scene_Base
  214.   #--------------------------------------------------------------------------
  215.   # ●
  216.   #--------------------------------------------------------------------------
  217.   @@screen_mode = 0
  218.   #--------------------------------------------------------------------------
  219.   # ●
  220.   #--------------------------------------------------------------------------
  221.   def self.screen_mode=(index)
  222.     @@screen_mode = index % WND_SIZE::SIZE_LIST.size
  223.   end
  224.   #--------------------------------------------------------------------------
  225.   # ●
  226.   #--------------------------------------------------------------------------
  227.   def self.screen_mode
  228.     @@screen_mode
  229.   end
  230.   #--------------------------------------------------------------------------
  231.   # ○ フレーム更新
  232.   #--------------------------------------------------------------------------
  233.   alias _cao_update_wndsize update
  234.   def update
  235.     _cao_update_wndsize
  236.     if Input.trigger?(WND_SIZE::INPUT_KEY) && WLIB::GAME_HANDLE != 0
  237.       Scene_Base.screen_mode += 1
  238.       if WLIB::SetGameWindowSize(*WND_SIZE::SIZE_LIST[@@screen_mode])
  239.         if WND_SIZE::FILE_SAVE
  240.           save_data(Scene_Base.screen_mode, WND_SIZE::FILE_SAVE)
  241.         end
  242.       else
  243.         Sound.play_buzzer
  244.       end
  245.     end
  246.   end
  247. end

  248. module WND_SIZE
  249.   #--------------------------------------------------------------------------
  250.   # ● 大きいサイズを除去
  251.   #--------------------------------------------------------------------------
  252.   def self.remove_large_window
  253.     dr = WLIB::GetDesktopRect()
  254.     WND_SIZE::SIZE_LIST.reject! do |wsz|
  255.       wsz.size != 2 || dr.width < wsz[0] || dr.height < wsz[1]
  256.     end
  257.     if WND_SIZE::SIZE_LIST.empty?
  258.       WND_SIZE::SIZE_LIST << [Graphics.width, Graphics.height]
  259.     end
  260.   end
  261.   #--------------------------------------------------------------------------
  262.   # ● 初期サイズの設定
  263.   #--------------------------------------------------------------------------
  264.   def self.init_window_size
  265.     if WND_SIZE::FILE_SAVE && File.file?(WND_SIZE::FILE_SAVE)
  266.       Scene_Base.screen_mode = load_data(WND_SIZE::FILE_SAVE)
  267.       WLIB::SetGameWindowSize(*WND_SIZE::SIZE_LIST[Scene_Base.screen_mode])
  268.     end
  269.   end
  270. end

  271. WND_SIZE.remove_large_window
  272. WND_SIZE.init_window_size
复制代码

点评

指定設定順序SIZE_LIST = [ [544,416], [640,480], [800,600], [1088,832], [0,0] ]♀[0,0]為全画面  发表于 2014-9-18 15:07
INPUT_KEY = :F5#指定使用KEY(不指定使用KEY用nil)  发表于 2014-9-18 15:06

评分

参与人数 1梦石 +1 收起 理由
VIPArcher + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
10
星屑
60
在线时间
337 小时
注册时间
2014-4-4
帖子
163
3
 楼主| 发表于 2014-9-18 16:39:13 | 只看该作者
tseyik 发表于 2014-9-18 15:03
按F5改画面
也可在事件脚本用
WLIB::SetGameWindowSize(width, height)調用

非常感谢~~~~~

新作短十作品~《前夜祭-哀魔女之诗》
地址:https://rpg.blue/thread-383776-1-1.html
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1591
在线时间
24 小时
注册时间
2015-4-16
帖子
2
4
发表于 2015-4-28 12:24:47 | 只看该作者
tseyik 发表于 2014-9-18 15:03
按F5改画面
也可在事件脚本用
WLIB::SetGameWindowSize(width, height)調用

代码95行 GAME_TITLE  = load_data("Data/System.rvdata2").game_title.encode('SHIFT_JIS')
最后的'SHIFT_JIS'是日文编码,会导致【数据库】-【系统】-【游戏标题】无法使用简体字。
换成'UTF-8'或'GB_2312'后又无法改变窗口大小……
求解答……
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
22703
在线时间
8623 小时
注册时间
2011-12-31
帖子
3367
5
发表于 2015-4-28 13:25:47 | 只看该作者
amida 发表于 2015-4-28 12:24
代码95行 GAME_TITLE  = load_data("Data/System.rvdata2").game_title.encode('SHIFT_JIS')
最后的'SHIF ...

('SHIFT_JIS')改成('UTF-8')
97行取消#
即可

点评

已解决,谢谢  发表于 2015-4-29 02:22
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
32 小时
注册时间
2015-8-16
帖子
13
6
发表于 2015-8-21 15:42:51 | 只看该作者
很實用的腳本~
但是為什麼我沒辦法改變窗口大小QwQ
明明照樣把('SHIFT_JIS')改成('UTF-8'),97行刪掉了

点评

0.0原來我有閱讀障礙((誤 成功了!謝謝你~  发表于 2015-8-21 19:07
不是刪掉97行,是刪掉97行的第一個#字  发表于 2015-8-21 16:31
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
579
在线时间
448 小时
注册时间
2009-6-8
帖子
62
7
发表于 2018-10-11 18:39:41 | 只看该作者
guan mo xue xi ,ke yi yuo chu kuan yin mu de xiao guo
http://share.renren.com/share/293782735/15182858551
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-9-23 05:30

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表