Visual studio创建了错误大小的窗口和错误的系统指标
Visual studio creating wrong sized windows and wrong system metrics
没关系,这个问题是重复的。我也许可以从其他来源弄清楚这一点。
我太困惑了。我正在进行我的项目,并意识到用CreateWindowEx()创建的窗口比我指定的要大。我注意到发布模式下的窗口比调试模式下的大。然后,我取了GetSystemMetrics(SM_CXSCREEN)和SM_CXFULLSCREEN的值,注意到在调试模式下,它给了我1920 x 1080的值,这是正确的,但在发布模式下,我给了我1536 x 864的值。
此外,如果我只是启动一个新的Win32项目,只需按下ctrl+F5就可以运行,那么在调试和发布模式下,我会得到错误的值,与以前的值相同,而且窗口更大。
我不知道提供任何代码会有什么帮助,我可以制作一个视频,但是。。。这根本没有道理。有人能通过启动一个新的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。"控制面板"中有"把东西做大"的选项,这对眼睛来说更容易。我的滑块设置为中间一个,相当于大125%,即120 dpi,这就是为什么System Metrics返回了错误的值,而我的窗口更大。dpi越来越大,所以系统认为它必须按照放大的比例画出更大的东西。如果你认为有人将一个窗口编程为200像素,那么当一个拥有超高分辨率双分辨率显示器的人运行它时,它仍然是200像素,但是物理尺寸的一半,比如说英寸。因此,通过将dpi"设置"(不是dpi)加倍,而是将dpi的"设置"从96增加到194,或者将其放大200%,可以使窗口占据400个像素,但与原始显示的大小相同。
无论如何,如果在Visual Studio上,最简单的解决方法就是简单地通过项目属性,转到"清单"菜单,然后选择"输入/输出",最后一个选项应该是DPI Awareness。我的是"无"。只有在大多数情况下才需要将其设置为"高DPI感知",这将解决问题。另一个选项是"每台显示器的DPI感知",这意味着它将以动态方式进行相应的调整,例如,在应用程序运行时更改DPI缩放,或者在运行时将窗口移动到另一台显示器上。高DPI感知设置将在启动时进行检查。
有趣的是,如果你转到任何exe的属性,在兼容性选项卡下,你可以选中"禁用高DPI设置下的显示缩放",这也会起作用。最后,还有一个免费的程序,现在归微软所有,名为processexplorer,它基本上就像任务管理器,具有额外的功能,你可以选择DPI意识列,看看哪些程序具有DPI意识。是的,DPI意识是一件事,我觉得很愚蠢。还有很多其他方法可以做到这一点,比如函数调用和合并清单,但我对此一无所知,现在累得连呼吸都无法呼吸。
- [longjmp/setjmp]c++ 相同的代码窗口有异常 Linux 没有错误并且运行良好
- 可能的Qt5错误:调用setFixedSize()禁用主窗口的关闭按钮(在Win7下)
- OpenGL C++(制作简单窗口时抛出错误)
- 创建进程 API 失败,在窗口 122 上出现错误代码 10
- _CrtIsValidHeapPointer(块)错误在应用单例-帕特恩后退出主窗口时引发
- C++,弹出调试断言失败窗口,我得到矢量迭代器不兼容的错误运行时
- 使用程序集嵌入数据时"Undefined reference"错误,使用适用于窗口的 mingw-w64 编译(COFF 而不是 ELF)
- Visual Studio 2019 不会打开包含源文件的窗口,也不会定位为出现错误的行
- 将 c++ 程序语法错误重定向到窗口中的文件
- 咖啡窗口的错误
- SFML 中的分段错误 调用 sf::窗口::关闭后
- 提升 1.58.0 窗口进程.h 错误
- 模型对话框移动到主窗口后面的Qt错误
- SDL窗口的错误
- QT:错误 ["*"令牌之前的预期")",并且主窗口未命名类型]
- MPI_Win_free会导致无效窗口错误
- Mingw makefile 编译错误窗口
- wxwidgets 错误窗口.H 已包括在内
- Qt链接器错误窗口
- _mkdir给出错误窗口