为什么我的 VS SDL 2.0 窗口比我指定的窗口大 2 倍?



我有一个3840x2160的显示器,使用Windows 10。 我只是创建一个窗口和一个渲染器。当我将窗口大小设置为 200x200 并运行程序时,窗口会显示出来,我可以完美地渲染。但是窗口确实是 400x400 像素大,一个点 (SDL_RenderDrawPoint((( 实际上是 2x2 像素大。此外,当我在 10,10 处绘制点时,它位于按像素计数的位置 20,20。 当我在设置中将 Windows 10 分辨率设置为 1920x1080 时,窗口的大小合适,点只有一个像素大且位于正确的位置。 如果有人知道这个问题以及如何使用 3840x2160 设置将窗口达到像素完美尺寸,我将不胜感激。;)

我想你很久以前就解决了这个问题,但如果有人仍然遇到问题: 问题是 Windows 使用 UI 缩放设置(DPI 缩放(缩放窗口,因为程序被标记为非 DPI 感知。 我在 Steam 上的游戏遇到了同样的问题。有两种方法可以让 Windows 8+ 不将缩放应用于你的游戏: 1) 右键单击已编译的.exe 选择属性 打开兼容性选项卡 选择更改高 DPI 设置 勾选底部框并选择: 覆盖高 DPI 缩放行为。

缩放执行者: 应用

此解决方案不优雅,不适合分发,因为您需要每个用户都这样做。

  1. 如果使用 Visual Studio,请将清单文件设置为:DPI 感知、监视器感知(并尝试在程序中执行适当的缩放,或者为用户提供这样做的选项(。 若要在 Visual Studio 2013 中访问清单,请执行以下操作: 在"解决方案资源管理器"中右键单击目标程序,选择:"配置属性\清单工具 将 DPI 感知设置为:每个监视器高 DPI 感知, Windows应该让你的游戏不理会。

我的问题是我的窗口无法识别DPI,因此Windows位图缩放它。对此的正常解决方法是在创建窗口时将SDL_WINDOW_ALLOW_HIGHDPI标志提供给窗口,但遗憾的是,目前还没有对 DPI 感知的窗口支持(或者我只是没有找到任何关于它的内容(,所以它不起作用。一些Poeple正在努力在Windows上获得SDL2的Windows每显示器(V2(DPI感知。 无论如何,我刚刚为我在上面的问题中描述的问题找到了一个奇怪的解决方案: 我可以使用SDL_WINDOW_FULLSCREEN标志(宽度和高度不重要(,将我的窗口映射到全屏,忽略窗口正在使用的比例因子,大多数情况下,由于条纹,这使我的窗口无法使用。然后我关闭窗口,取出SDL_WINDOW_FULLSCREEN标志并再次运行程序。现在窗口是真正的 1:1 像素大小,如果我的窗口设置中有 200% 的比例因子。 我知道这是一个不干净和奇怪的修复,所以如果有人知道为什么这有效或知道更好的方法,请继续。

最新更新