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

Project1

 找回密码
 注册会员
搜索

RMXP多窗体 v2.0

查看数: 3971 | 评论数: 6 | 收藏 4
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2017-11-1 20:21

正文摘要:

本帖最后由 SixRC 于 2017-11-2 08:05 编辑 新开一主题 因为改了很多 解决了很多上一版本的问题 这次写了好多天 写到今天终于感觉 几乎是差不多了吧 果然代码还是要慢慢慢慢写 涂涂改改涂涂改改才好发布的 那么 ...

回复

黑白无双 发表于 2018-2-21 20:33:47
不错,感谢楼主分享。
Tian_Ya 发表于 2018-2-7 14:59:44
SixRC 发表于 2018-2-6 16:40
#随主窗口移动而移动
hm = Win32API.new('kernel32','GetModuleHandleA','p','l').call('RGSS103J')
code ...

同样的窗口x,y坐标在不同分辨率的电脑生成的位置不同

点评

当然不一样了..你需要获取桌面分辨率然后判断一下写个调整的式子什么的  发表于 2018-2-7 17:52
SixRC 发表于 2018-2-6 16:40:42
本帖最后由 SixRC 于 2018-2-6 16:43 编辑
Tian_Ya 发表于 2018-2-5 23:52
关于前辈的RMXP多窗体 v2.0
请问能否实现,生成的窗体跟随主窗体的移动而移动
要如何做到呢? ...


RUBY 代码复制
  1. #随主窗口移动而移动
  2. hm = Win32API.new('kernel32','GetModuleHandleA','p','l').call('RGSS103J')
  3. code = [139,68,36,4,139,128,196,182,18,0,139,64,8,194,16,0].pack('C*')
  4. $main_hwnd = Win32API.new('user32.dll','CallWindowProc','pllll','l').call(code,hm,0,0,0)
  5. xy = ' '*16
  6. Win32API.new('user32','GetWindowRect','lp','v').call($main_hwnd,xy)
  7. $main_xy = xy.unpack('ll')
  8. class << Graphics
  9.   GetWindowRect = Win32API.new('user32','GetWindowRect','lp','v')
  10.   MoveWindow = Win32API.new('user32','MoveWindow','llllll','l')
  11.   alias e_update update
  12.   def update
  13.     xy = ' '*16
  14.     GetWindowRect.call($main_hwnd,xy)
  15.     if (xy1 = xy.unpack('ll')) != $main_xy
  16.       GetWindowRect.call(Ewindow::Hwnd,xy)
  17.       xy2 = xy.unpack('llll')
  18.       MoveWindow.call(Ewindow::Hwnd,xy2[0]+xy1[0]-$main_xy[0],
  19.                                    xy2[1]+xy1[1]-$main_xy[1],
  20.                                    xy2[2]-xy2[0],
  21.                                    xy2[3]-xy2[1],0)
  22.       $main_xy = xy1
  23.     end
  24.   e_update
  25.   end
  26. end


把它插到子窗口的脚本前面就可以了
哪个或哪些个子窗口需要随着主窗口动而动就插过去
子窗口需要是后台运行的
原理是检测主窗口的位置 他动了子窗口就跟着动 所以每次update会刷新位置
子窗口自己移动不会影响主窗口 测试了下效率和效果蛮好的

点评

前辈厉害了  发表于 2018-2-7 14:37
Tian_Ya 发表于 2018-2-5 23:52:30
关于前辈的RMXP多窗体 v2.0
请问能否实现,生成的窗体跟随主窗体的移动而移动
要如何做到呢?

点评

应该可以 我会尝试实现的 不过暂时有点事 完成了会再次通知的  发表于 2018-2-6 13:26
fux2 发表于 2017-11-2 10:15:44

我还以为是黑Graphics在多个窗口上画,没想到这么高端,连内存都独立了

点评

明明黑Graphics更加复杂吧!我就单纯的想 重复加载dll 载入rgss 一个rgss对应一个窗口 用完了扔掉 简单易操作!  发表于 2017-11-2 11:28
imsy 发表于 2017-11-1 20:53:27
本帖最后由 imsy 于 2017-11-1 23:25 编辑

虽然对“当作多线程来用”非常感兴趣但是范例闪退……

无论是双击game.exe、从工程测试还是管理员身份运行,都直接窗口出现一两秒后直接没有了,什么内容都还没显示就消失了……
Ewindow文件夹里有两个dll和两个rxdata。
32位Win7系统,也许是个例吧,楼主可以等等看别的坛友

在main里到处加p找是在哪里出问题的,然后定位在了p1.run这里,这以上的p都p出来了,后面的没出来就闪退了。


楼主更新了主楼的脚本,现在已经可以使用了


点评

解决 结论 ruby调用Win32API 有些api传回短型 不过用l会反一个l回来就炸了 用i不确定 还是l返回来后用pack unpack转换一下  发表于 2017-11-1 23:08
可私聊?  发表于 2017-11-1 21:34
能提供一些详细的信息吗 比方怎么个闪退法 没有任何信息 无法做出判断啊..毕竟只有一台电脑 而这里正常..  发表于 2017-11-1 21:15
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-5-15 16:01

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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