我正在尝试使用带有常规窗口窗体(而不是WPF)的C# .NET来制作一个对每个监视器新闻部都有帮助的应用程序。
我理解选择每台显示器新闻部支持的概念,并在清单中这样做了:
<!-- Indicates that the application is DPI-aware and will not be automatically scaled by Windows at higher
DPIs. Windows Presentation Foundation (WPF) applications are automatically DPI-aware and do not need
to opt in. Windows Forms applications targeting .NET Framework 4.6 that opt into this setting, should
also set the 'EnableWindowsFormsHighDpiAutoResizing' setting to 'true' in their app.config. -->
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">True/PM</dpiAware>
</windowsSettings>
</application>当我选择这样做时,我的应用程序从96个opt监视器(我的默认监视器)拖到一个144 opt监视器上时,它的像素大小根本不会改变(也就是说,应用程序在两个监视器上都是像素对像素相同的,除了最小化-最大化-关闭字形的微小差异)。因此,应用程序非常小,文本很难在144 and显示器上阅读。
EnableWindowsFormsHighDpiAutoResizing设置似乎没有任何效果,因为我的应用程序以完全相同的方式显示该设置是否正确,除非我在app.config文件中做错了什么:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />
</appSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2"/>
</startup>
</configuration>有人能解释一下这个选项的作用吗?
它是编写C# windows窗体应用程序的解决方案的一部分吗?当从96 the监视器拖动到144 the监视器时,windows窗体应用程序会自动调整自身的大小吗?(我的意思是,不需要编写代码来迭代所有控件并设置自定义缩放因子)。
我已经对这个问题做了很多小时的研究,但我自己还没有一个明确的答案。
看来,如果我选择了每台显示器,新闻部的意识,那么我必须提交WM_DPICHANGED自己,以便做些什么。如果这是答案,那就顺其自然吧,但我真的觉得我错过了一些建立在做事方式上的东西。
发布于 2022-11-10 07:25:57
"dpiAware = true“意味着应用程序应该处理DPI更改,否则Windows将为您缩放表单/字体。这是我的理解。
https://stackoverflow.com/questions/38604966
复制相似问题