三国群英2吧 关注:42,868贴子:991,049
  • 23回复贴,共1

【测试】锁定窗口化时的长宽比

只看楼主收藏回复

如题。
试出了一个结果,但感觉心底有点虚,毕竟Windows编程我是门外汉,全靠谷歌和百度。 同时,因为目标函数的功能太关键,有一些担心在已有的其它修改版上的兼容性。
希望各个版本的朋友都帮忙测试一下有没有问题。


IP属地:美国1楼2020-04-22 15:41回复
    UE修改方法:
    从:
    A27D: 7D EC 10 77 1B 83 7D EC 10 0F 84 D5 00 00 00 83 7D EC 01 74 43 83 7D EC 02 74 2B E9 4F 01 00 00 83 7D EC 1C 0F 84 F6 00 00 00 83 7D EC 20 0F 84 06 01 00 00 81 7D EC 04 01 00 00 0F 84 AD 00 00 00 E9 29 01 00 00
    A300: 2B 4D F8 8B 15 B8 39 4C 00 03 D1 89 15 B8 39 4C 00
    A319: 8B 0D BC 39 4C 00 03 C8 89 0D BC 39 4C 00 6A 06 8B 15 BC 39 4C 00 2B 15 B4 39 4C 00 52 A1 B8 39 4C 00 2B 05 B0 39 4C 00 50 8B 0D B4 39 4C 00 51 8B 15 B0 39 4C 00 52
    改为:
    A27D: F8 10 0F 84 DC 00 00 00 83 F8 01 74 4B 83 F8 02 74 34 83 F8 1C 0F 84 05 01 00 00 83 F8 20 0F 84 16 01 00 00 3D 04 01 00 00 0F 84 BF 00 00 00 83 F8 05 74 24 E9 36 01 00 00 90 90 90 90 90 90 90 90 90 90 90 90 90
    A300: BA B0 39 4C 00 83 7D EC 05 74 13 2B 4D F8 01 4A 08
    A319: 01 42 0C EB 19 8B 45 F8 89 C1 83 E1 FB 29 C8 29 42 08 6B C9 03 C1 F9 02 2B 4D FC 01 4A 0C 6A 06 8B 4A 0C 2B 4A 04 51 8B 42 08 2B 02 50 8B 4A 04 51 8B 02 50 90 90 90


    IP属地:美国2楼2020-04-22 15:43
    收起回复
      原理是侦听WM_SIZE(窗口尺寸变化)事件,一旦发生,则调用SetWindowPos系统函数,强制调整长宽比为4:3——具体逻辑是,如果长边长度不能被4整除,则先缩减长边长度使之能被4整除,然后再调整短边长度为(长边长度 * 3 / 4)。
      因为空间有限,共用了侦听WM_CREATE(游戏启动时创建窗口)事件的一部分代码,因此特意保持了原来的640和480两个数字的代码位置不变(猜测如果一些改版修改了窗口大小,应该至少会动这两个数字)。所以逻辑会有一点点奇怪。
      大家测试一下。


      IP属地:美国3楼2020-04-22 15:48
      回复
        可以直接做成补丁么


        IP属地:山东4楼2020-04-22 16:46
        收起回复


          IP属地:黑龙江5楼2020-04-22 17:15
          收起回复
            技术贴,一定要顶,再也不担心,把画面拖扁了。


            IP属地:重庆来自Android客户端6楼2020-04-23 08:47
            回复
              临时度盘:pan点baidu点考姆/s/1LICob0isMMLMTRv9zVLOkg
              x11p


              IP属地:美国7楼2020-04-23 12:18
              收起回复
                远帆锁定800*600 窗口化怎么改的


                IP属地:江苏来自iPhone客户端8楼2021-04-15 07:56
                收起回复