Ouroboros / ED6-Steam-CN

Steam 版空之轨迹 汉化+语音
153 stars 20 forks source link

报告一个SetWindowPos的问题 #16

Closed eriforce closed 2 years ago

eriforce commented 2 years ago

大佬好, 因为隔壁repo没有开issues就发在这里了

https://github.com/Ouroboros/Falcom/blob/d7fd30fc7a8fbf4416d0af2d792de20e7d6df661/ED6Steam/frida/src/ed6fc_dx9/ed6fc.ts#L194 发现这个地方,在使用borderless windowed mode(显示器原生分辨率+窗口模式)的情况下,窗口位置会向上偏移 目前FC、SC中都有这段代码所以有一样的问题

shangjiaxuan commented 2 years ago

代码看起来像是没有做多余处理,只是在调用win32api。并且这里没有依赖decoration,用的是正确的client的坐标。有可能是微软的问题。建议附带windows版本号和可重现的代码提交微软。

eriforce commented 2 years ago

这里把窗口居中了吧,猜测是不是因为borderless没有标题栏导致了窗口偏上

我本地目前去掉了这个if就正常了

shangjiaxuan commented 2 years ago

根据微软文档SWP_NOMOVE的含义是

SWP_NOMOVE  0x0002
Retains the current position (ignores X and Y parameters).

确实看起来代码有问题(只有等于nomove的时候执行,计算一个被忽略的结果,而且是flag应该用&位运算)。那个if里面没注意。。。

Ouroboros commented 2 years ago

根据微软文档SWP_NOMOVE的含义是

SWP_NOMOVE  0x0002
Retains the current position (ignores X and Y parameters).

确实看起来代码有问题(只有等于nomove的时候执行,计算一个被忽略的结果,而且是flag应该用&位运算)。那个if里面没注意。。。

flags这里没问题,是针对游戏的逻辑,有一处调用flags是no move,目的是只在那里居中

Ouroboros commented 2 years ago

大佬好, 因为隔壁repo没有开issues就发在这里了

https://github.com/Ouroboros/Falcom/blob/d7fd30fc7a8fbf4416d0af2d792de20e7d6df661/ED6Steam/frida/src/ed6fc_dx9/ed6fc.ts#L194 发现这个地方,在使用borderless windowed mode(显示器原生分辨率+窗口模式)的情况下,窗口位置会向上偏移 目前FC、SC中都有这段代码所以有一样的问题

原版设置好像没有无边框的选项啊

eriforce commented 2 years ago

大佬好, 因为隔壁repo没有开issues就发在这里了 https://github.com/Ouroboros/Falcom/blob/d7fd30fc7a8fbf4416d0af2d792de20e7d6df661/ED6Steam/frida/src/ed6fc_dx9/ed6fc.ts#L194 发现这个地方,在使用borderless windowed mode(显示器原生分辨率+窗口模式)的情况下,窗口位置会向上偏移 目前FC、SC中都有这段代码所以有一样的问题

原版设置好像没有无边框的选项啊

分辨率选到显示器分辨率的时候,windowed mode会变成borderless windowed mode image

Ouroboros commented 2 years ago

主要问题是全屏后, SPI_GETWORKAREA返回的高度是不包含任务栏的, 这样算出来的X就错了

Ouroboros commented 2 years ago

代码和百度网盘更新了

eriforce commented 2 years ago

非常感谢