没关系,这个问题是重复的。我或许可以从其他来源解决这个问题。
我很困惑。我正在研究我的项目,并意识到使用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。
答案 0 :(得分:2)
嗯,这是重复的,但如果这有助于任何人解释DPI扩展的问题。基本上默认的Windows设置是96 DPI。控制面板中有一些选项可以使东西变得更大,而且眼睛更容易。我的滑块设置为中间的一个,相当于125%的大,或120 dpi,这就是为什么系统指标返回错误的值,我的窗口更大。 dpi变得更大,因此系统假定它必须根据放大比例绘制更大的东西。如果你认为有人将一个窗口编程为200像素,当有超级双分辨率显示器的人运行它时,它仍将是200像素,但是物理尺寸的一半,比如英寸。所以通过加倍dpi"设置",而不是dpi,但是dpi"设置"从96到194,或将其缩放200%使窗口占据400像素,但相对于原始显示器的大小相同。
无论如何,如果在Visual Studio上,最简单的解决办法就是通过项目属性,转到" manifest"菜单,然后选择"输入/输出",最后一个选项应该是DPI Awareness。我的开始没有"没有"。只有在大多数情况下才能将其置于"高DPI Aware",这将解决问题。另一种选择,即每个监视器DPI意识"意味着它将以动态方式进行相应调整,例如在应用程序运行时更改dpi缩放,或者在窗口运行时将窗口移动到另一台监视器上。高DPI Aware设置将在启动时进行检查。
有趣的是,如果你转到任何exe的属性,并在兼容性选项卡下,你可以检查"在高DPI设置和#34;上禁用显示缩放,这也可以。最后,有一个免费程序,现在由Microsoft拥有,称为进程资源管理器,它基本上类似于具有额外功能的任务管理器,您可以选择DPI Awareness列并查看哪些程序可识别DPI。是的,DPI意识是一种东西,我感到很愚蠢。还有很多其他方法可以做到这一点,比如函数调用和合并清单,但是我对此并不了解,而且我现在太累了,甚至不能呼吸。