c++ - Visual Studio 创建错误大小的窗口和错误的系统指标

标签 c++ window size resolution

没关系,这个问题是重复的。我也许可以从其他来源弄清楚这一点。

我真是太困惑了。我正在处理我的项目,并意识到使用 CreateWindowEx() 创建的窗口比我指定的要大。我注意到 Release模式下的窗口比 Debug模式下的窗口更大。然后我获取了 GetSystemMetrics(SM_CXSCREEN) 和 SM_CXFULLSCREEN 的值,并注意到在 Debug模式下它给我的分辨率是 1920 x 1080,这是正确的,但在 Release模式下它给我的分辨率是 1536 x 864。

此外,如果我刚刚启动一个新的 Win32 项目,只需按 ctrl + F5 即可启动并准备运行,我在调试和 Release模式下都会得到错误的值,与以前的值相同,并且窗口更大.

我不明白提供任何代码有什么帮助,我可以制作一个视频,但是......这没有意义。任何人都可以通过启动一个新的 Win32 项目来看看这种情况是否发生在他们身上,并且看到 1600 x 900 实际上占用了那么多空间?因为 1600 x 900 占据了我的整个屏幕,而它不应该占据我的整个屏幕。

谢谢。

经过进一步检查,它给我的 1536 x 864 分辨率是应有尺寸的 80%,或者换句话说,它应该是其倒数的 1.25 倍。此外,如果我将桌面分辨率更改为 1600 x 900,指标将为我提供 1280 x 720,这又是 80%,或者分辨率比给定值大 1.25。

最佳答案

嗯,这是重复的,但如果这对任何人有帮助,我会解释 DPI 缩放的问题。基本上 Windows 的默认设置是 96 DPI。控制面板中有“使内容变大”的选项,这对眼睛来说更容易。我的 slider 设置为中间的 slider ,相当于放大 125%,或 120 dpi,这就是系统指标返回错误值的原因,而且我的窗口更大。 dpi 变大,因此系统假设它必须按照放大比例将所有内容绘制得更大。如果你考虑有人将窗口编程为 200 像素宽,那么当有人使用 super 双分辨率显示器运行它时,它的宽度仍然是 200 像素,但物理尺寸的一半,比如按英寸计算。因此,通过将 dpi“设置”(不是 dpi,而是 dpi“设置”)从 96 加倍到 194,或将其放大 200%,使窗口占据 400 像素,但与原始显示的大小相同。

无论如何,如果在 Visual Studio 上,最简单的解决方法就是通过项目属性,进入“ list ”菜单,然后选择“输入/输出”,最后一个选项应该是 DPI 感知。我的是“无”。在大多数情况下,只需将其设置为“High DPI Aware”即可解决问题。另一个选项是“每个显示器 DPI 感知”,意味着它将以动态方式进行相应调整,例如在应用程序运行时更改 dpi 缩放比例,或者在运行时将窗口移动到另一个显示器上。 High DPI Aware 设置将在启动时进行检查。

有趣的是,如果您转到任何 exe 的属性,并在兼容性选项卡下,您可以选中“在高 DPI 设置上禁用显示缩放”,这也将起作用。最后,有一个免费程序,现在由 Microsoft 拥有,称为 process explorer,它基本上类似于带有额外功能的任务管理器,您可以选择 DPI Awareness 列并查看哪些程序支持 DPI。是的,DPI 意识是一回事,我觉得很愚蠢。还有很多其他方法可以做到这一点,例如函数调用和合并 list ,但我对此一无所知,而且现在太累了,甚至无法呼吸。

关于c++ - Visual Studio 创建错误大小的窗口和错误的系统指标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36750392/

相关文章:

c# - 在 Winform 应用程序中更改组合框的高度

c++ - 复制二维结构数组 C++

C++ 计算负数和大于 X 的数

c++ - 将无父场景项置于另一个场景项下

java - 防止调整窗口大小

javascript - window.location= 和 window.location.replace() 有什么区别?

css/smarty 在悬停时改变容器的大小

c++ - 牛顿法对某些多项式发散

c# - 设置在 WinForms 应用程序中打开的控制台窗口的位置

swing - Java获取边框颜色和大小